![bash 完成处理出错,如何调试?](https://linux22.com/image/1239205/bash%20%E5%AE%8C%E6%88%90%E5%A4%84%E7%90%86%E5%87%BA%E9%94%99%EF%BC%8C%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%EF%BC%9F.png)
一切都始于一个简单的
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
文件就足够了。