使用PHP命名空间时,我处理的代码使用大量的命名空间别名,例如
<?php
namespace foo;
use bar\baz\qux as bazQux;
...
$a = new bazQux();
是否可以配置Exuberant Ctags来索引这些命名空间别名的使用,以便我可以从使用别名的行(上面的实例化)直接跳转到真正的类?如果那是不可能的,那么可以实现的最佳妥协是什么?
我已经在某个地方看到了一个尚未集成的ctags补丁,它使用PHP tokenizer来支持PHP,而不是当前基于regex的实现;如果可能的话,我想继续使用stock ctags,而不是自己修补和编译版本。
答案 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汇编来弄脏你的手,但它对我来说非常有用:)