这一切都始于一个简单的
alias gv='gvim --remote-quiet'
Run Code Online (Sandbox Code Playgroud)
现在gv Space Tab在通常应该给出文件名的地方什么也不给。奇怪,
alias gvi='gvim --remote-quiet'
Run Code Online (Sandbox Code Playgroud)
按预期工作。我显然有一个解决方法,但我想知道是什么吸引了我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
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
哪儿complete -o filenames -F _filedir_xpec gv来的呢?
msw*_*msw 10
我明白了,终于。它隐藏在/etc/bash_completions其中 - 具有讽刺意味的是 - 我忽略了它,因为它没有出现在我的文件名补全中。
有用的 bash_completions 认为这gv意味着ghostview它只允许我完成它期望 ghostview 可以处理的文件名:
complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?' gv ggv kghostview
Run Code Online (Sandbox Code Playgroud)
我认为这算作“太他妈有用了”。添加
alias gv='gvim --remote-silent'
complete -r gv
Run Code Online (Sandbox Code Playgroud)
到我的~/.bash_aliases文件就足够了。