我正在处理具有复杂对象层次结构的现有php项目。Netbeans 在这里是一个很大的帮助,因为它的自动完成功能(它并不完美,但在许多情况下足够准确)。几乎不可能记住所有这些属性、关系等。
但是,netbeans是用java编写的,它很慢,臃肿,等等。最近,我一直在玩 vim,并考虑放弃 netbeans。我目前正在使用此脚本:http://www.vim.org/scripts/script.php?script_id=3171
我缺少的一件事是多级对象的自动完成,例如:
答.php
<?php
class A {
/**
* @var B
**/
public $b;
}
乙.php
<?php
class B {
/**
* @var C
**/
public $c;
}
c.php
<?php
class C {
/**
* @var D
**/
public $d;
}
测试.php
$a = new A();
$a-> //omni complete here works fine, it lists "b"
$a->b-> //displays 'b' again, instead of 'c'
所以,它只适用于第一级..是否有可能以某种方式在vim中获得此功能?
如果没有,您如何在此类项目中找到自己的方式?
您的公共属性只不过是空变量:
public $b;
因为你没有给它任何属性/方法,也没有让它成为B()
的实例,所以你不应该指望 Vim 为$b->
提出任何有用的补全。
跟:
答.php,
<?php
class A {
public $b = new B();
}
b.php,
<?php
class B {
public $c = new C();
}
c.php
<?php
class C {
public $c;
}
和测试.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 如何。