2010-02-02 69 views
6

我正在編輯使用Moose的軟件包,我想知道是否有一個用於使Moose屬性出現在Tag List中的插件。是否有一個vim插件使得駝鹿屬性在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"); 
} 
+0

MooseX :: AttributeHelpers已棄用;使用Moose :: Meta :: Attribute :: Native :: Trait :: *。 – Ether 2010-02-02 07:45:11

+0

謝謝。我知道,但這是「遺留」代碼。 ;) – 2010-02-02 08:16:44

回答

5

添加行

--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' 
+0

這工作如果我從命令行運行ctags,但TagList似乎沒有讀取文件。有什麼建議麼?如果這是線索,我正在使用Windows。 – daotoad 2010-02-02 18:54:05

+1

@daotoad我添加了vim所需的設置,並更新了ctags配置,爲這些條目分配了特定的標籤類型。這應該讓一切正常。 – 2010-02-02 19:48:06

+0

謝謝。我無法讓它在我的電腦上工作,所以我在一個新的虛擬機上試用了它,並且它工作正常。現在我知道你的代碼工作正常,我知道接下來要看什麼。再次感謝! – 2010-02-03 19:32:59

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模塊中的屬性。

另外,我發現它有用也有關於父類信息,角色和使用的模塊在標記列表顯示出來,所以這裏是我的完整$ 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 

我覺得有用使用Tlist_Show_One_File選項,這迫使標籤列表只顯示標籤當前選定的文件。
要暫時隱藏某些標籤,您始終可以將光標移動到標籤名稱上,然後按「zc」(和「zo」重新打開)摺疊。

相關問題