2010-06-03 38 views
5

我編輯與有幾個方法,一類簡單的PHP文件,如果$bar是這個類的一個實例,I型Vim的:由omnicomplete顯示,那些在ctags的限制方法

$bar->CTRLXCTRLØ

我得到了很多,除了我的那些類和存在於ctags的列表方法(內建的)一個彈出。如何避免顯示所有這些外部方法,並只保留在我的班級中定義的方法?

+0

同樣的問題 - 沒有解決方案:/ http://stackoverflow.com/questions/1224838/vim-php-omni-completion – nuqqsa 2010-06-03 21:45:54

回答

1

我相信你已經看到了VIM文件(:help ft-c-omni)本: 「」

當使用CTRL-X CTRL-O的名稱後,沒有任何或「 - >」,則直接從標籤文件完成 。這適用於任何標識符,也可以使用 名稱。如果你想完成一個本地變量名稱,在標籤文件中沒有出現 ,請改用CTRL-P。

當使用CTRL-X CTRL-O之後的東西有「。」或「 - >」Vim將嘗試 來識別變量的類型並找出它具有的成員。 這意味着只有對變量有效的成員纔會被列出。

當成員名稱已經完成時,CTRL-X CTRL-O將添加一個「。」。或 「 - >」複合類型。

如果我正確閱讀,內置功能最多隻允許您使用CTRL-P並匹配局部變量名稱,從而完全繞過TAGS文件。

你真正想要的是一個TAGS文件,特定於你當前正在使用的翻譯單元(header/cpp文件)。如果我試圖解決這個問題,我會執行以下步驟:

  1. 創建一個腳本(或者更好的是,合併到makefile中)自動創建翻譯單元特定的TAG文件。
  2. 在vim中創建一個命令,用於卸載現有的TAGS文件,重新加載文件特定的TAGS文件,並執行常規的CTRL-X CTRL-O omni-completion。如有必要,還原爲原始標籤。

此外,在我看來,您似乎希望能夠直接從VIM調用#1的腳本,因爲您在編碼時會經常更改當前的翻譯單元。

我希望能讓你開始朝正確的方向發展,我很樂意看到/幫助你實現一個=)。

+0

不,我在寫PHP代碼,而不是C++。文檔指出''之後「 - >」只完成給定類的函數和變量名「,但這不是我得到的行爲。 – 2010-06-03 22:23:19

+0

你是對的,我的錯。如果你符合要求(Exuberant ctags 5.5.4/newer)並且已經嘗試了@var技巧;這是一個非常奇怪的問題。這幾乎就好像標籤在找不到更具體的東西(變量的類)時默認爲全局範圍。 – reshen 2010-06-03 22:37:42