在bash中,在路径深度超过两个目录的情况下发出vim命令时,路径的自动完成最近停止工作(它继续与其他命令(如ls和cd)一样工作)。
例如,如果我键入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完成的旧版本的一个问题,但是我运行的是2.1-5。
更新:经过一些额外的测试后,我发现根本的问题是bash将只完成目录名,而不是文件名。
更新:原来bash-completion是主要原因。见我对已被接受的答案的第二个评论。
任何关于这种行为的潜在原因的建议,我们都会感激地收到!
发布于 2014-07-25 23:30:31
我为您做了更多的研究,下面是我发现的--自动完成的关键是bash命令complete。您可以使用以下方法打印vim的规则:
complete -p vim同样,您可以通过以下方式删除这些特定规则:
complete -r vim此命令将其重置为默认值-通常的路径和文件名完成时不需要任何额外的逻辑。这可能就是你想要的。
要了解更多信息,请查看help complete或man bash,并查找有关complete命令的部分(它是bash内置的,因此在bash手册中有文档)。
最后一点-上面的更改只影响当前的bash会话,如果您想在每次登录后删除complete -r vim到~/.bashrc。
希望有帮助:)
发布于 2014-07-25 04:00:57
Bash by默认值只自动完成路径和文件名。但是,该机制是可扩展的,可以教bash为不同的程序执行不同的自动完成。例如,对于git,它可以自动完成子命令名(克隆、提交)和修订,而不仅仅是路径名。有时很方便,有时很烦人--例如,当gzip -d拒绝自动完成没有.gz扩展的文件名时。
Bash通常是在/etc/bash_completion.d中配置的--您可能会在其中找到一个名为vim的文件。这是包含vim命令行自动完成规则的文件。
现在你有两个选择:
vim规则,并且只执行默认路径自动完成。当然,提交一个错误报告,概述问题,以便在将来的版本中得到修正:)
https://unix.stackexchange.com/questions/146303
复制相似问题