2010-02-02 6 views
6

Edytuję pakiety, które używają łosia, i zastanawiałem się, czy istnieje wtyczka do tworzenia atrybutów łosia na liście znaczników.Czy istnieje wtyczka vim, która powoduje, że atrybuty Łosia pojawiają się w Tag_List?

Na przykład w poniższym kodzie, atrybut options nie pokazać się w Tag_List, ale print_out_site robi:

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 jest przestarzałe; użyj Łoś :: Meta :: Atrybut :: Natywny :: Cecha :: *. – Ether

+0

Dzięki. Wiedziałem o tym, ale jest to kod "starszy". ;) –

Odpowiedz

5

Dodaj linię

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

do ~/.ctags i to powinien się pojawić. Konieczne może być zmodyfikowanie wyrażenia regularnego, aby uniknąć fałszywych dopasowań w innych plikach lub aby uwzględnić różne formatowanie deklaracji atrybutów w innych plikach.

Rozszerza to ctags, dzięki czemu wykrywa inny typ znacznika na podstawie wyrażenia regularnego podczas analizowania plików perla.

Następnie trzeba powiedzieć taglist wtyczki na temat nowego rodzaju znacznika dodając to do pliku vimrc:

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

Działa to, jeśli uruchomię ctags z wiersza poleceń, ale TagList nie wydaje się czytać pliku. Jakieś sugestie? Używam systemu Windows, jeśli to jest wskazówka. – daotoad

+1

@daotoad Dodałem potrzebne ustawienia dla vima i zaktualizowałem konfigurację ctags, aby przypisać określony rodzaj tagu dla tych wpisów. To powinno sprawić, że wszystko działa. –

+0

Dzięki. Nie mogłem go uruchomić na moim komputerze, więc wypróbowałem go na nowej wirtualnej maszynie i wszystko działało dobrze.Teraz, gdy wiem, że twój kod działa dobrze, wiem, gdzie szukać dalej. Jeszcze raz dziękuję! –

5

Geoff, próbowałem swój kod, ale nie działa na mnie ze składnią ty posługiwać się. Czy to może być problem z wersją? Używam rozbudowanych wersji ctags 5.8.
Zmodyfikowałem również wyrażenie regularne, ponieważ cudzysłowy są opcjonalne i możesz chcieć zezwolić na spacje (ale nic poza tym) poprzedzające słowo kluczowe "has".
Oto, co sprawdziło się u mnie. stworzyłem plik $ HOME/.ctags (nie masz jeszcze konta, w przeciwnym razie po prostu dodać do niego) z następującej linii:

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

Następnie dodaje się wiersz w .vimrc jak zasugerował

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

Teraz pokazuje moje atrybuty w modułach Moose.

Ponadto uważam, że warto też mieć informacje na temat klasy nadrzędnej, role i używane moduły pokazać się w taglist, więc tutaj jest mój pełny plik $ 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/ 

i to co mam w .vimrc (można zmienić kolejność znaczników w taglist po prostu przez zmianę kolejności w 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 

ze względu na zawartość dodatkową Uważam, że warto skorzystać z opcji Tlist_Show_One_File , która zmusza taglistę do wyświetlania tylko znaczników aktualnie wybrany plik.
Aby tymczasowo ukryć niektóre tagi, zawsze możesz przenieść kursor do nazwy znacznika i nacisnąć "zc" (i "zo", aby ponownie otworzyć) zakładkę.

Powiązane problemy