2012-08-23 34 views
4

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

+0

谢谢你们,set complete =和argadd都有效。由于缺乏Scala支持,未尝试Exuberant Ctags。 –

回答

5
:argadd **/* 

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

:argadd **/*.cpp 
7

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

:set complete=k**/* 

如果你想保留其他默认位置(其它缓冲剂,包括文件等),使用:set complete+=要添加到它。


或者,因为这可以为默认的太慢了,你可以使用 '字典' 选项,并使用CTRL-X CTRL-K完成:

:set dictionary=**/* 
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(否,拒绝完成)或继续正常输入将会停止磁盘访问搜索。如果所有包含的文件都在您的标签文件中,您会立即发现完成。