我在命令行上有这个:
ln -sf $PWD/wine-
然后我点击Tab完成文件名。在早期版本的 Ubuntu 中,这可以很好地完成wine-
文件名(并且作为副作用,$PWD
当时会扩展)。但现在它变成了
ln -sf \$PWD/wine-
这根本不是我的意思,而且没有完成任何事情,因为该文件实际上不是以 开头的$
。
我如何才能使完成度恢复到不那么中断的行为?
set
告诉我这些是我当前的设置:
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
答案1
我发现bash 版本 >= 4.2.29有一个新的direxpand
shopt 设置。(查看man docs/bash.1
是否签出新的 bash,或查看bash.1 从第 8951 行开始)
如果有人使用 Quantal Quetzal 12.10 或以其他方式获得(或签出并构建)一个新的 bash,那么:
shopt -s direxpand
给予我想要的、需要的和喜欢的行为。
解决方法:与此同时,Ctrl++代替也能达到我想要的Alt效果。但有点尴尬。ETab
顺便说一句,有几个线程名为“bash tab 变量扩展问题?”错误。通过阅读它们,我找到了这里的信息。
答案2
shopt -u progcomp
这帮我解决了这个问题,它还删除了很多“智能”完成选项,我发现这些选项会妨碍我完成那些我知道存在的文件,因为这个愚蠢的东西认为我不想将它们作为特定命令的参数。ARRRGH
答案3
_filedir()
在顶层 bash_completion 脚本中搜索并更改行
compopt -o filenames 2>/dev/null
到
compopt -o filenames -o noquote 2>/dev/null
答案4
对于那些(像我一样)使用 12.04 的人,可以使用 ~+ 代替 $PWD...
例如 :
cd /bin
echo ~+/ls
/bin/ls