11

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

<?php
namespace foo;

use bar\baz\qux as bazQux;

...

$a = new bazQux();

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

我在某处看到了一个尚未集成的 ctags 补丁,它使用 PHP 标记器来支持 PHP,而不是当前基于正则表达式的实现;如果可能的话,我想继续使用股票 ctags,而不是自己修补和编译一个版本。

4

3 回答 3

4

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

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

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

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

于 2013-10-28T19:07:47.440 回答
2

我不太了解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
于 2017-04-27T19:44:59.047 回答
1

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

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

这个项目还支持诸如“use”关键字和命名空间之类的东西,但不幸的是它依赖于 CTags 的补丁版本。

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

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

于 2015-06-30T12:06:47.233 回答