为vim自动完成递归包含一个目录

时间:2012-08-23 15:05:17

标签: vim

我从源代码的基目录中使用vim。在编辑单个文件时,我希望自动完成考虑此目录(和子目录)中每个文件的每个单词。

3 个答案:

答案 0 :(得分:7)

完成由'complete'选项控制。使用k标志,您可以拥有Vim扫描文件。 **通配符代表子目录的递归下降。瞧:

:set complete=k**/*

如果要保留其他默认位置(其他缓冲区,包含的文件等),请使用:set complete+=添加。


或者,因为对于默认值来说这可能太慢,您可以使用'dictionary'选项并使用Ctrl-X Ctrl-K完成:

:set dictionary=**/*

答案 1 :(得分:5)

:argadd **/*

这将递归地将所有文件加载到缓冲区中,完成将考虑它们。请注意,这将加载所有文件,包括您可能不想添加的文件,例如二进制文件或CVS目录中的文件。如下一个更精细的水滴可能是一个好主意。

:argadd **/*.cpp

答案 2 :(得分:1)

我认为更好的方法是使用Exuberant CTags在目录系统中生成标记文件。

对于初学者,请使用以下内容在源代码的根目录中构建tags文件:

  

ctags -R。

这可能比您更喜欢,但您可以使用更多命令行选项进行调整。

设置tags选项以引用此文件(“tags”是默认名称),或使用set tags=./tags;/将目录树搜索到找到的第一个标记文件。请参阅:help file-searching以了解向上搜索的;/语法。

最后,确保't'在您的完整选项中。它默认存在,但请查看set complete?。如果不存在,set complete+=t会把它放在那里。

我个人从我的'complete'选项中删除'i'和'd',因为即使键入CTRL_Y(是,接受完成)或CTRL_N(不,拒绝完成)或继续正常,磁盘访问也很烦人打字会停止搜索。如果所有包含的文件都在您的标签文件中,您将立即找到完成。