当使用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编译来弄脏你的手,但它对我来说非常有效:)