7

我正在尝试在 Ubuntu 12.04.1 (LTS) 上使用 ctags 5.9~svn20110310 在 vi​​m 7.3 中为 PHP 设置全能补全,但我遇到了一个非常奇怪的问题,其中补全为同一类的实例提供了截然不同的预测。

我有以下两个文件:

// 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。我究竟做错了什么?

4

1 回答 1

4

编辑:关于您的具体问题,如果您有旧版本的 phpcomplete.vim,您可能只能通过使用特殊的 phpdoc 标签(请参阅此问题)或重新生成您的标签来正确完成变量声明变量后的文件。

很可能,您没有做错任何事。ctags 中的 PHP 支持非常基础,也不是很严格,不幸的是,这也意味着缺乏对 Vim 的支持。快速浏览 ctags 模块可以说明问题:

ctags/php.c

而已。只是几个相对基本的正则表达式。底部的解析器内容不再使用,而且很长一段时间都没有使用过。

使问题更加复杂的是,Vim 中 PHP 的标准全功能函数充其量是 hackish。可以说它涉及在所有打开的窗口之间切换作为其完成过程的一部分(Vim 文档明确谴责这种做法)。看看你自己:

phpcomplete.vim/autoload/phpcomplete.vim

很长一段时间以来,我一直在为 Vim 中糟糕的 PHP 完成而苦苦挣扎,并确定只有彻底检修才能产生令人满意的结果。我已经加入了 ctags 开发邮件列表,并且我计划在那里改进 PHP 支持,然后再继续使 Vim 的全完备功能在解释语言中尽可能正常地工作。目前,不幸的是,解决方案是等到支持更好,或者自己修复它。

于 2013-04-03T20:01:38.303 回答