能否在Bash中一次性修改整行内容并显示自动补全建议?
能否在Bash中同时修改整行命令内容并显示自动补全建议?
Bash支持通过bind -x绑定自定义函数,借助READLINE_LINE和READLINE_POINT变量可以直接修改当前输入的整行命令内容,还能调整光标位置:
$ cat test.sh #!/bin/bash autocompletefunc() { echo $READLINE_LINE >> test.out READLINE_LINE='已完全重写的命令行 & 光标位置在这里 ->X<-' READLINE_POINT=51 } $ source test.sh $ bind -x '"\t" : autocompletefunc' $ smth<TAB> <== 触发后会转换为: $ 已完全重写的命令行 & 光标位置在这里 ->|X<-
(注:示例中的|代表光标实际位置)
但通过complete -F注册的自动补全函数存在局限:它只能修改当前输入的单个单词,无法直接修改整行内容。如果尝试向COMPREPLY提供带控制转义码的内容,转义码会被直接打印出来:
$ smth word<TAB> $ smth ^[[2Kotherwisetheargumentcanentirelybereplaced
另外需要注意,所有自动补全相关变量,仅在可编程补全设施调用的shell函数中可用。
现在的问题是:有没有办法将complete -F的自动补全建议功能,与bind -x的整行修改功能结合起来?最好能通过<TAB><TAB>触发,实现类似以下的效果:
$ smth<TAB><TAB> $ 修改后的命令行=| 后续内容 possiblevalue1 possiblevalue2 possiblevalue3
内容的提问来源于stack exchange,提问作者Andriy Sultanov
相关产品推荐
相关产品推荐

