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


How do I configure ctags to index PHP namespaces and their aliases?

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

<?php
namespace foo;
use bar'baz'qux as bazQux;
...
$a = new bazQux();

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

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

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

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

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

因此,我认为您找不到一个支持php命名空间的预构建包。

我对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

对于那些不在边缘等待的人,有一个解决方案:

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

该项目还支持诸如"use"关键字和名称空间之类的东西,但不幸的是,它依赖于修补版本的CTag。

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

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