bash完成处理变坏了,怎么调试?


9

一切始于简单

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
+1表示完整性和<kbd> Space </ kbd> <kbd> Tab </ kbd>
Aleksandr Levchuk 2011年

Answers:


10

我终于明白了。它被隐藏在/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档案就足够了。


恭维!大故障排除!
dag729 2010年
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.