六仅完成 bash 中的目录

六仅完成 bash 中的目录

在我输入的目录中vi,然后tab(两次),这给了我

user$ vi 
CMakeFiles/ global/     libs/

ls后面跟着 2 tabs 给了我

user$ ls 
! core.log CMakeFiles/ global/     libs/ _jni/

(笔记:ls 的别名为“ls -Ah --color=auto”, _jni 是一个符号链接,并且没有任何文件被隐藏。)

我认为vi在制表符完成期间不显示任何文件,而仅显示目录。为什么会发生这种情况?如何使vi行为方式与 相同ls?在浏览了 SE 上的一篇文章后,我在 ~/.vimrc 中添加了以下行。但在这种情况下它似乎没有做任何事情。

set wildmode=longest,list,full
set wildmenu

版本vi:VIM - Vi IMproved 版本 7.3.429
版本ls:ls (GNU coreutils) 8.13

答案1

我在Arch Linux上也遇到了同样的问题,最后我发现这是补全函数的问题。

用于complete -r vim删除完成符。 (或者将该行放入您的 bashrc 中)

答案2

此行为与 ls 命令或 vi 二进制文件没有直接关系。相反,它是由 shell 的制表符补全功能控制的。如果您在 Linux 上使用 bash,您可能已经了解了/etc/bash_completion如何/etc/bash_completion.d/*实现完成的完整规则。

答案3

检查您的文件中是否存在类似于以下内容的行/etc/bash_completion

complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

在 shell 上执行此命令。或者在文件中添加以上行/etc/bash_completion并执行:

bash /etc/bash_completion

相关内容