2012-09-25 24 views
7

我試圖建立全方位爲完成在PHP 7.3的vim的ctags用5.9〜svn20110310在Ubuntu 12.04.1 LTS(),但我遇到了一個很奇怪的問題,即完成提供了截然不同的預測同一類的實例。Omnicompletion停止給有用的預測

我有以下兩個文件:

// Foo.php 
class Foo { 
     public function do_stuff() { 
       echo 'Working...'; 
     } 
} 

// index.php 
require 'Foo.php'; 
$f = new Foo(); 
$f->[cursor position 1] 

$g = new Foo(); 
$g->[cursor position 2] 

當光標在位置1和我按CTRL + XCTRL + Ødo_stuff(情結行,因爲我們會期待。但是,當我按CTRL +XCTRL +Ø第二位置,我得到的是與key, next, rewind開始預測的列表。我究竟做錯了什麼?

+0

當按下CTRL + X CTRL + O在第二位置是之前所有的代碼(包括'$ F - > [光標位置]')有效的代碼? –

+0

是的,絕對。 '$ F - > [光標位置1]'變爲'$ F-> do_stuff();' –

+0

是否'Foo'實現'Iterator'界面? – philix

回答

4

編輯:關於你的具體問題,如果你有一箇舊版本phpcomplete.vim的,它可能是你只能適當地或者通過一個特殊的PHPDoc的標籤(see this question)將其標記爲完成過一個變量或通過聲明變量後重新生成標籤文件。

在所有的可能性,你沒有做錯什麼; ctags中的PHP支持是非常基礎的,並不是非常嚴格,這不幸意味着Vim支持也不足。就讓我們來看看在ctags的模塊說明了這個問題:

ctags/php.c

就是這樣。只是一些相對基本的正則表達式。底層的解析器內容已經不再使用了,而且悲劇性地持續了很長時間。

雪上加霜的問題是,在Vim的PHP的標準omnicomplete功能是最好的hackish;我只想說,它涉及所有打開的窗口之間切換作爲其完成過程(由Vim文檔明確譴責的行爲)的一部分。看看自己:

phpcomplete.vim/autoload/phpcomplete.vim

我曾與Vim的可怕的PHP完成現在掙扎了很長一段時間,並已經確定,簡直可以說是徹底的改革將產生一個滿意的結果。我已經加入了ctags開發郵件列表,並計劃在那裏改進PHP支持,然後繼續使Vim的omnicompletion在解釋型語言中正常工作。目前,不幸的是,解決方案是等到支持更好,或者自己修復。