使用 vim 命令进行 Bash 自动完成

The*_*olf 13 bash vim arch-linux autocomplete

在 bash 中,当发出vim路径比两个目录更深的命令时,路径的自动补全最近停止工作(它继续按预期与其他命令一起工作,例如lscd)。

例如,如果我输入ls .config/btsync/bt然后按 TAB,它会扩展为ls .config/btsync/btsync.conf.

如果我输入vim .config/bt然后按 TAB,它会扩展为vim .config/btsync/.

但是,如果我键入vim .config/btsync/bt然后按 TAB,则什么也不会发生(我希望它会扩展为vim .config/btsync/btsync.conf,如上ls例所示。

以我自己的用户身份运行和以 su 身份运行时,我遇到了同样的问题。

我读过这篇文章,其中提到了旧版本的 bash-completion 存在问题,但我运行的是 2.1-5。

更新:经过一些额外的测试,我发现根本问题是 bash只会完成目录名,而不是文件名。

更新:事实证明这bash-completion是整体原因。请参阅我对已接受答案的第二条评论。

任何有关这种行为的潜在原因的建议将不胜感激!

MLu*_*MLu 10

我为你做了一些更多的研究,这是我发现的 - 自动完成的关键是bash命令complete. 您可以打印使用规则vim

complete -p vim
Run Code Online (Sandbox Code Playgroud)

同样,您可以通过以下方式删除这些特定规则:

complete -r vim
Run Code Online (Sandbox Code Playgroud)

此命令将其重置为默认值 - 通常的路径和文件名完成,没有任何额外的逻辑。这可能就是你想要的。

有关更多信息,请查看help completeman bash查找有关complete命令的部分(它是 bash 内置的,因此记录在 bash 手册页中)。

最后一点 - 上述更改仅影响当前bash会话,如果您想在每次登录后删除 vim 规则complete -r vim,请将~/.bashrc.

希望有帮助:)

  • 毕竟似乎 bash 完成是罪魁祸首。`/usr/share/bash-completion/bash_completion` 中的 `_filedir_xspec` 函数只完成目录。我已经卸载了 `bash-completion`,从我的 `.bashrc` 中删除了 `complete -r vim` 行并重新启动,`vim` 现在按预期运行。 (3认同)