6

我正在编辑使用 Moose 的包,我想知道是否有一个插件可以让 Moose 属性显示在标签列表中。

例如,在以下代码中,该属性options不会显示在 Tag_List 中,但print_out_site会显示:

use Moose;
use MooseX::AttributeHelpers;

...

has 'options' => (
    metaclass => 'Collection::Hash',
    isa       => 'HashRef[Str]',
    is        => 'ro',
    provides  => {
        exists => 'exists',
        get    => 'get',
        set    => 'set',
    },
);

...

sub print_out_site {
    my $self = shift;
    my $key  = shift;
    $self->fasta_out_fh->print(">", $key, "\n");
    $self->fasta_out_fh->print($self->sites->{$key}, "\n");
}
4

2 回答 2

5

添加行

--regex-perl=/has '(.*)' => \(/\1/a,attribute,moose attributes/

到 ~/.ctags ,它应该会出现。您可能需要调整正则表达式以避免其他文件中的虚假匹配或适应其他文件中属性声明的不同格式。

这扩展了 ctags 以便在解析 perl 文件时根据正则表达式检测另一种类型的标签。

然后你需要通过将它添加到你的 vimrc 文件来告诉 taglist 插件关于新的标签类型:

let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'
于 2010-02-02T18:05:50.920 回答
5

杰夫,我试过你的代码,但你使用的语法对我不起作用。这可能是版本问题吗?我正在使用 exuberant ctags 5.8 版。
我还稍微修改了正则表达式,因为引号是可选的,并且您可能希望在 'has' 关键字之前允许空格(但没有别的)。
这对我有用。我使用以下行创建了一个 $HOME/.ctags 文件(还没有,否则只需添加到它):

--regex-perl=/^\s*has\s+['"]?([0-9a-zA-Z_]+)/\1/a,attribute/

然后按照您的建议在 .vimrc 中添加该行

let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'

现在它在 Moose 模块中列出了我的属性。

此外,我发现在 taglist 中显示有关父类、角色和使用的模块的信息也很有用,所以这是我完整的 $HOME/.ctags 文件:

--regex-perl=/^\s*has\s+['"]?([0-9a-zA-Z_]+)/\1/a,attribute/
--regex-perl=/^\s*with\s+(['"])(.+)\1/\2/r,role/
--regex-perl=/^\s*extends\s+(['"])(.+)\1/\2/e,extends/
--regex-perl=/^\s*use\s+([^ ;]+)/\1/u,use/

这就是我在 .vimrc 中的内容(您可以通过更改 tlist_par_settings 中的顺序来更改 taglist 中标签的顺序):

let tlist_perl_settings='perl;u:use;p:package;r:role;e:extends;c:constant;a:attribute;s:subroutine;l:label'
let Tlist_Show_One_File = 1

由于附加内容,我发现使用 Tlist_Show_One_File 选项很有用,它强制标记列表仅显示当前选定文件的标记。
要暂时隐藏一些标签,您可以随时将光标移动到标签名称并点击“zc”(和“zo”重新打开)折叠。

于 2010-08-24T12:36:46.723 回答