T_P*_*YIM 7 php vim ctags omnicomplete
我试图在vbu 7.3中使用ctags 5.9~svn20110310在Ubuntu 12.04.1(LTS)上设置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]
Run Code Online (Sandbox Code Playgroud)
当光标位于位置1并按下CTRL+ X CTRL+时,O它do_stuff(会按照我们的预期编译该行.但是当我在第二个位置按CTRL+ X CTRL+时O,我会得到一个以...开头的预测列表key, next, rewind.我究竟做错了什么?
编辑:关于您的具体问题,如果您有旧版本的 phpcomplete.vim,您可能只能通过使用特殊的 phpdoc 标记(请参阅此问题)或重新生成标记来正确完成变量声明变量后的文件。
很可能,你没有做错什么;ctags 中的 PHP 支持非常基础且不是很严格,不幸的是这意味着 Vim 也缺乏支持。快速浏览一下 ctags 模块就可以说明问题:
就是这样。只是一些相对基本的正则表达式。底部的解析器内容不再使用,而且不幸的是已经很长时间没有使用了。
使问题更加复杂的是,Vim 中 PHP 的标准全能函数充其量只是黑客行为;我只想说,作为其完成过程的一部分,它涉及在所有打开的窗口之间进行切换(Vim 文档明确谴责这种做法)。你自己看一下:
phpcomplete.vim/自动加载/phpcomplete.vim
很长一段时间以来,我一直在与 Vim 中糟糕的 PHP 完成度作斗争,并确定只有彻底修改才能产生令人满意的结果。我已经加入了 ctags dev 邮件列表,我计划改进那里的 PHP 支持,然后再让 Vim 的全能补全功能像在解释语言中一样正常工作。不幸的是,目前的解决方案是等待支持更好,或者自己修复。