2012-09-25 12 views
7

我试图建立全方位为完成在PHP 7.3的vim的ctags用5.9〜svn20110310在Ubuntu 12.04.1 LTS(),但我遇到了一个很奇怪的问题,即完成提供了截然不同的预测同一类的实例。Omnicompletion停止给有用的预测

我有以下两个文件:

// 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 + XCTRL + Ødo_stuff(情结行,因为我们会期待。但是,当我按CTRL +XCTRL +Ø第二位置,我得到的是与key, next, rewind开始预测的列表。我究竟做错了什么?

+0

当按下CTRL + X CTRL + O在第二位置是之前所有的代码(包括'$ F - > [光标位置]')有效的代码? –

+0

是的,绝对。 '$ F - > [光标位置1]'变为'$ F-> do_stuff();' –

+0

是否'Foo'实现'Iterator'界面? – philix

回答

4

编辑:关于你的具体问题,如果你有一个旧版本phpcomplete.vim的,它可能是你只能适当地或者通过一个特殊的PHPDoc的标签(see this question)将其标记为完成过一个变量或通过声明变量后重新生成标签文件。

在所有的可能性,你没有做错什么; ctags中的PHP支持是非常基础的,并不是非常严格,这不幸意味着Vim支持也不足。就让我们来看看在ctags的模块说明了这个问题:

ctags/php.c

就是这样。只是一些相对基本的正则表达式。底层的解析器内容已经不再使用了,而且悲剧性地持续了很长时间。

雪上加霜的问题是,在Vim的PHP的标准omnicomplete功能是最好的hackish;我只想说,它涉及所有打开的窗口之间切换作为其完成过程(由Vim文档明确谴责的行为)的一部分。看看自己:

phpcomplete.vim/autoload/phpcomplete.vim

我曾与Vim的可怕的PHP完成现在挣扎了很长一段时间,并已经确定,简直可以说是彻底的改革将产生一个满意的结果。我已经加入了ctags开发邮件列表,并计划在那里改进PHP支持,然后继续使Vim的omnicompletion在解释型语言中正常工作。目前,不幸的是,解决方案是等到支持更好,或者自己修复。