代码之家  ›  专栏  ›  技术社区  ›  Christopher Bottoms zerkms

是否有一个vim插件可以让Moose属性显示在标签列表中?

  •  6
  • Christopher Bottoms zerkms  · 技术社区  · 16 年前

    例如,在下面的代码中,属性 options 不显示在标记列表中,但 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 回复  |  直到 16 年前
        1
  •  5
  •   Geoff Reedy    16 年前

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

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

    这扩展了ctags,以便在解析perl文件时检测到另一种基于正则表达式的标记类型。

    然后,您需要通过将以下内容添加到vimrc文件中,告知标记列表插件有关新标记类型的信息:

    let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'
    
        2
  •  5
  •   tospo    15 年前


    我还稍微修改了正则表达式,因为引号是可选的,您可能希望在'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'
    

    此外,我发现在标记列表中显示有关父类、角色和使用过的模块的信息也很有用,因此下面是我完整的$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/
    

    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”重新打开)折叠。