VIM php omnicomplete - 多级对象层次结构

时间:2012-04-09 09:01:09

标签: php vim omnicomplete

我正在处理具有复杂对象层次结构的现有php项目。 Netbeans在这里是一个很大的帮助,因为它具有自动完成功能(它不完美,但在很多情况下足够准确)。记住所有这些属性,关系等几乎是不可能的。

但是,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中获得此功能?

如果没有,你如何找到这样的项目?

1 个答案:

答案 0 :(得分: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。