2012-04-09 74 views
2

我正在使用複雜對象層次結構的現有php項目。 Netbeans在這裏是一個很大的幫助,因爲它的自動完成功能(這不完美,但在很多情況下足夠準確)。這幾乎是不可能的,要記住所有這些屬性,關係等。VIM php omnicomplete - 多級對象層次結構

但是,netbeans是用java編寫的,它很慢,臃腫等等。 最近,我一直在玩vim,並在考慮拋開netbeans。 我目前使用這個腳本:http://www.vim.org/scripts/script.php?script_id=3171

有一件事我缺少的是對對象的多層次,例如自動完成:

a.php只會

<?php 
class A { 

    /** 
    * @var B 
    **/ 
    public $b; 

} 

b.php

<?php 
class B { 

    /** 
    * @var C 
    **/ 
    public $c; 

} 

c.php

<?php 
class C { 

    /** 
    * @var D 
    **/ 
    public $d; 

} 

test.php的

$a = new A(); 
$a-> //omni complete here works fine, it lists "b" 
$a->b-> //displays 'b' again, instead of 'c' 

所以,它僅適用於第一級..是有可能以某種方式獲得VIM這個功能?

如果不是,您如何在這些項目中找到自己的方式?

回答

2

你的公共屬性都不過是空的變量:

public $b; 

因爲你沒有給它的任何屬性/方法或使它的B()一個實例,你不應該指望的Vim提出任何有用的完成爲$b->

有了:

a.php只會,

<?php 
class A { 
    public $b = new B(); 
} 

b.php,

<?php 
class B { 
    public $c = new C(); 
} 

c.php

<?php 
class C { 
    public $c; 
} 

test.php的

<?php 
    $a = new A(); 
    $a-> // proposes b 
    $a->b-> //proposes b 

    $b = $a-> // proposes b 
    $b = $a->b; 
    $c = $b-> // proposes c 
    $c = $b->c; 
    $d = $c-> // proposes d 

所以...的PHP完成插件可能是有點有限的(毫無疑問,Vim文本編輯器,而不是一個IDE),但它似乎如果你堅持工作更傳統(和可讀)的編碼風格。

同樣,Vim只有一個文本編輯器。一個非常強大的,但它仍然是只有一個文本編輯器。有些情況下,臃腫的IDE 是適合工作的合適工具,但速度很慢,但是您喜歡Vim。

+0

這不會在PHP中工作 - 你不能直接在類屬性中實例化對象。我使用了phpdoc類型的提示,因爲它適用於大多數php IDE,我不確定ctags是否可以配置爲正確解析。 – Nevermind 2012-04-09 20:57:19

+1

是的。我的代碼根本不正確。非常糟糕。但實際上這是有意的:因爲Vim不理解你的代碼,ctags'不支持PHPdoc暗示我不知道如何在Vim中使用PHPdoc暗示完成。得到你想要的東西的唯一方法似乎是編寫可怕的非法代碼。 – romainl 2012-04-09 21:50:56