Chr*_*oms 6 vim perl 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");
}
Run Code Online (Sandbox Code Playgroud)
添加行
--regex-perl=/has '(.*)' => \(/\1/a,attribute,moose attributes/
Run Code Online (Sandbox Code Playgroud)
到〜/ .ctags,它应该出现.您可能需要调整正则表达式以避免其他文件中的虚假匹配或适应其他文件中属性声明的不同格式.
这扩展了ctags,以便在解析perl文件时根据正则表达式检测另一种类型的标记.
然后,您需要通过将此标记添加到vimrc文件来告诉taglist插件有关新标记类型的信息:
let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'
Run Code Online (Sandbox Code Playgroud)
Geoff,我尝试了你的代码,但它对我使用的语法不起作用.这可能是版本问题吗?我正在使用旺盛的ctags版本5.8.
我还修改了正则表达式,因为引号是可选的,你可能想要在'has'关键字之前允许空格(但没有别的).
这对我有用.我用以下行创建了一个$ HOME/.ctags文件(还没有一个,否则只是添加它):
--regex-perl=/^\s*has\s+['"]?([0-9a-zA-Z_]+)/\1/a,attribute/
Run Code Online (Sandbox Code Playgroud)
然后按照建议在.vimrc中添加该行
let tlist_perl_settings='perl;c:constant;l:label;p:package;s:subroutine;a:attribute'
Run Code Online (Sandbox Code Playgroud)
现在它在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/
Run Code Online (Sandbox Code Playgroud)
这就是我在.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
Run Code Online (Sandbox Code Playgroud)
由于附加内容,我发现使用Tlist_Show_One_File选项很有用,它强制标记列表仅显示当前所选文件的标记.
要暂时隐藏某些标签,您可以随时将光标移动到标签名称,然后点击"zc"(和"zo"重新打开)折叠.