4

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

4

3 回答 3

8

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

:set complete=k**/*

当您想保留其他默认位置(其他缓冲区、包含文件等)时,请使用:set complete+=来添加。


或者,由于这对于默认值来说太慢了,您可以使用 'dictionary' 选项并使用 Ctrl-X Ctrl-K 补全:

:set dictionary=**/*
于 2012-08-23T16:05:19.903 回答
5
:argadd **/*

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

:argadd **/*.cpp
于 2012-08-23T16:05:27.703 回答
1

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

tags对于初学者,在源代码的根目录中构建文件:

ctags -R。

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

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

最后,确保 't' 在您的完整选项中。默认情况下它在那里,但请检查set complete?. 如果它不在那里,set complete+=t将它放在那里。

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

于 2012-08-23T16:26:13.327 回答