在具有 bash 版本“3.2.51(1)-release” (OS: SUSE Linux Enterprise Server 11.1 (x86_64)) 的远程计算机上,我无法使用变量名进行通常的制表符补全。例如,我想输入:
echo $OLDPWD/
然后在斜线末尾,我可以按“Tab”,变量名将扩展为旧目录名(在最后一个cd
或pushd
命令之前)。这在我自己的笔记本电脑(Debian 7,Bash 4.2.37(1)-release)上有效。为什么在这个 SLES bash shell 中它不起作用?
同样地,如果我输入
echo $OLDP
然后按下“Tab”键,bash 会将其补全为$OLDPWD
。这在 SLES 11 bash 中也不会发生。
哪些控制变量(shopt?set?)会影响这种行为?
答案1
shopt -s direxpand
echo $HOME/<tab>
在 bash 4.2 中将扩展为。echo /home/matt/
在 bash 4.1 中它应该是默认的。
我发现这bash-completion
确实会把事情搞得一团糟。我总是卸载bash-completion
或运行complete -r
以确保各个完成规则不会对默认完成产生愚蠢的影响。
如果$OLDPWD
确实设置了,则应echo $OLDP<tab>
扩展为echo $OLDPWD
。我不知道什么可以阻止这种情况发生。
答案2
尝试C-x $
而不是TAB
明确请求可能的变量(而不是其他东西)完成。
答案3
检查答案 urxvt-选项卡扩展环境变量作者:德米特里·亚历山德罗夫。
“这是关于 direxpand 选项。
$ shopt -s direxpand 和 $FOO_PATH/
将通过 TAB 进行扩展”