具有目录名称的环境变量的Bash自动补全


10

除其他外,我在Linux Mint 14上使用bash 4.2.37。

当我通过键入来自动完成环境变量的名称时Tab,它将扩展为该变量的名称,后跟一个空格。

如果变量的值恰好是目录名,我希望它扩展为变量名,后跟/

例如,如果我键入:

$ ls $HOM<tab>

它扩展为:

$ ls $HOME _

其中_标记光标的位置。问题在于,我通常希望继续在主目录下键入某些文件或目录的名称,这意味着我必须先键入backspace,然后再键入/

因此,我希望以上内容扩展为:

$ ls $HOME/_

当我输入整个变量名时,也会发生同样的事情。之后ls $HOMEtab添加一个空格,我希望它添加一个/

(当然,/如果变量的值不是目录名,我当然不希望它添加一个。)

是否可以通过bash命令或通过更新my来告诉bash遵循我想要的方式$HOME/.inputrc

注意:我正在特别寻找一种使tab行为表现出所需方式的方法。用不同的击键实现相同行为的方法将很有趣,但不会回答我的问题。

(我已/etc/profile.d/bash_completion.sh在系统上禁用它,因为它与的交互作用较弱set -o nounset。快速实验表明,这可能与我的问题无关。)

顺便说一句,tcsh这样做:给定一个环境变量$FOOBAR,如果它引用目录,则键入$FOOBA<tab>扩展为;$FOOBAR/如果不是,则键入扩展为$FOOBAR。不,这还不足以说服我回到tcsh。zsh也这样做。


+1如果您喜欢冒险,这里是代码
l0b0 2014年

@ l0b0:(a)我已经拥有它。(二)我不觉得很冒险的。(c)假设是可编程完成。
基思·汤普森

Answers:


6

该功能已在2014年2月26日发布的bash 4.3中实现。

引用NEWS文件(包含在的顶级bash-4.3.tar.gz,另请参见GPG签名):

单词完成代码检查包含外壳程序变量的文件名是否扩展为目录名,并/适当地附加到单词。执行命令完成时,相同的代码会在命令名称中扩展shell变量。

对从源构建的副本进行的快速实验表明,如果我键入

$ ls $HOM<tab>

现在扩展到

$ ls $HOME/

(顺便说一句,zsh也这样做。)


1
为此必须手动安装bash。fedora 20存储库中未包含4.3。
jozxyqk 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.