bash 完成处理出错,如何调试?

bash 完成处理出错,如何调试?

一切都始于一个简单的

alias gv='gvim --remote-quiet'

现在gv Space Tab它通常应该给出文件名,但什么也没有给出。奇怪的是,

alias gvi='gvim --remote-quiet'

按预期工作。我显然有一个解决方法,但我想知道是什么让我陷入了gv特殊处理。compopt没有帮助,因为gv共享相同的设置,ls文件名补全正确。

$compopt gv
compopt +o bashdefault +o default +o dirnames -o filenames +o nospace +o plusdirs gv
$ compopt ls
compopt +o bashdefault +o default +o dirnames -o filenames +o nospace +o plusdirs ls

complete命令稍微有帮助一点,但它并没有告诉我为什么我的两个角色被挑出来进行修改:

$ complete -p gv
complete -o filenames -F _filedir_xspec gv
$ complete -p ls
complete -o filenames -F _longopt ls
$ complete -p echo
bash: complete: echo: no completion specification
$ alias gvi='gvim --remote-silent'
$ complete -p gvi
bash: complete: gvi: no completion specification

从哪來的complete -o filenames -F _filedir_xpec gv

答案1

我终于找到了。它隐藏在/etc/bash_completions某个地方——讽刺的是——我忽略了它,因为它没有出现在我的文件名补全中。

有用的 bash_completions 认为这gv意味着ghostview它只允许我完成它期望 ghostview 可以处理的文件名:

complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?' gv ggv kghostview

我认为这算是“太有帮助了”。添加

alias gv='gvim --remote-silent'
complete -r gv 

到我的~/.bash_aliases文件就足够了。

相关内容