是否有一个vim插件使得Moose属性显示在Tag_List中?

时间:2010-02-02 06:01:55

标签: perl vim moose taglist

我正在编辑使用Moose的软件包,我想知道是否有一个插件可以让Moose属性出现在Tag List中。

例如,在以下代码中,属性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");
}

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:5)

Geoff,我尝试了你的代码,但它对我使用的语法不起作用。这可能是版本问题吗?我正在使用旺盛的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模块中列出了我的属性。

此外,我发现在标记列表中显示有关父类,角色和已用模块的信息也很有用,所以这是我的完整$ 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中的顺序来更改标记列表中的标记顺序):

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

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