如何配置ctags来索引PHP命名空间及其别名?

时间:2013-08-22 07:47:27

标签: php vim namespaces exuberant-ctags

使用PHP命名空间时,我处理的代码使用大量的命名空间别名,例如

<?php
namespace foo;

use bar\baz\qux as bazQux;

...

$a = new bazQux();

是否可以配置Exuberant Ctags来索引这些命名空间别名的使用,以便我可以从使用别名的行(上面的实例化)直接跳转到真正的类?如果那是不可能的,那么可以实现的最佳妥协是什么?

我已经在某个地方看到了一个尚未集成的ctags补丁,它使用PHP tokenizer来支持PHP,而不是当前基于regex的实现;如果可能的话,我想继续使用stock ctags,而不是自己修补和编译版本。

3 个答案:

答案 0 :(得分:4)

这是官方更改日志:http://ctags.sourceforge.net/news.html

他们似乎没有合并这个补丁:

http://sourceforge.net/mailarchive/message.php?msg_id=30749245

所以我认为你不能找到一个带有php命名空间支持的预构建包。

答案 1 :(得分:1)

我不太了解php,但我想

use bar/baz/qux as bazQux;

应该是

use bar\baz\qux as bazQux;

替换/使用\ Universal-ctags(https://ctags.io)后可以很好地捕获bazQux:

[jet@localhost]~/var/ctags% cat foo.php
cat foo.php
<?php
namespace foo;

use bar\baz\qux as bazQux;

[jet@localhost]~/var/ctags% ./ctags -o - foo.php
./ctags -o - foo.php
bazQux  foo.php /^use bar\\baz\\qux as bazQux;$/;"  a   namespace:foo   typeref:unknown:bar\\baz\\qux
foo foo.php /^namespace foo;$/;"    n

答案 2 :(得分:0)

对于那些不等待的人,有解决方案:

您可以尝试为ViM改进PHP omni complete: https://github.com/shawncplus/phpcomplete.vim

这个项目还支持&#34;使用&#34;关键字和命名空间,但遗憾的是它取决于CTags的修补版本。

以下是如何准备支持命名空间的ctags版本的说明: https://github.com/shawncplus/phpcomplete.vim/wiki/Patched-ctags

我知道它不是一个脑死亡解决方案,它需要用你自己的ctags汇编来弄脏你的手,但它对我来说非常有用:)