我正在尝试在vbu 7.3中使用ctags 5.9~svn20110310在Ubuntu 12.04.1(LTS)上设置PHP的omni完成但是我遇到了一个非常奇怪的问题,其中完成为同一个类的实例提供完全不同的预测
我有以下两个文件:
// Foo.php
class Foo {
public function do_stuff() {
echo 'Working...';
}
}
// index.php
require 'Foo.php';
$f = new Foo();
$f->[cursor position 1]
$g = new Foo();
$g->[cursor position 2]
当光标位于位置1并按 CTRL + X CTRL + O 时,它会压缩与我们预期的do_stuff(
一致。但是当我在第二个位置按 CTRL + X CTRL + O 时,我会得到一个预测列表与key, next, rewind
。我做错了什么?
答案 0 :(得分:4)
编辑:关于您的具体问题,如果您使用旧版本的phpcomplete.vim,则可能只能通过使用特殊的phpdoc标记对其进行标记来正确完成变量(see this question)或在声明变量后重新生成标记文件。
很可能,你没有做错任何事; ctags中的PHP支持是非常基本的,并不是非常严格,不幸的是,这也意味着缺乏Vim支持。快速查看ctags模块说明了问题:
就是这样。只是几个相对基本的正则表达式。底部的解析器内容不再使用了,可悲的是已经很久没有了。
复杂的问题是,Vim中PHP的标准omnicomplete函数充其量只是hackish;足以说它涉及在所有打开的窗口之间切换作为其完成过程的一部分(Vim文档明确谴责的做法)。看看你自己:
phpcomplete.vim/autoload/phpcomplete.vim
我很长时间以来在Vim中完成了可怕的PHP完成工作,并且已经确定没有任何完整的改造会产生令人满意的结果。我已经加入了ctags dev邮件列表,我计划在那里改进PHP支持,然后继续使Vim的omnicompletion在解释语言中正常工作。现在,不幸的是,解决方案是等待支持更好,或者自己修复。