2

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

但是,netbeans是用java写的,速度慢,臃肿等等。最近一直在玩vim,想着抛弃netbeans。我目前正在使用这个脚本:http ://www.vim.org/scripts/script.php?script_id=3171

我缺少的一件事是多级对象的自动完成,例如:

一个.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;

}

测试.php

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

所以,它只适用于第一级.. 是否有可能以某种方式在 vim 中获得此功能?

如果没有,你如何在这些项目中找到自己的方式?

4

1 回答 1

2

您的公共属性不过是空变量:

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;
}

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。

于 2012-04-09T13:51:43.480 回答