2012-08-23 57 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(否,拒絕完成)或繼續正常輸入將會停止磁盤訪問搜索。如果所有包含的文件都在您的標籤文件中,您會立即發現完成。