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


VIM php omnicomplete - multi level object hierarchy

我正在处理具有复杂对象层次结构的现有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 如何。