2010-02-02 4 views
6

Я редактирую пакеты, которые используют Moose, и мне было интересно, есть ли плагин для создания атрибутов Moose в списке тегов.Есть ли плагин vim, который отображает атрибуты 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"); 
} 
+0

MooseX :: AttributeHelpers устарел; использовать Moose :: Meta :: Attribute :: Native :: Trait :: *. – Ether

+0

Спасибо. Я знал это, но это «устаревший» код. ;) –

ответ

5

Добавьте строку

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

в ~/.ctags и ему должен появиться. Вам может потребоваться настроить регулярное выражение, чтобы избежать ложных совпадений в других файлах или для размещения различного форматирования для объявлений атрибутов в других файлах.

Это расширяет ctags таким образом, что при анализе файлов perl он обнаруживает другой тип тега, основанный на регулярном выражении.

Тогда вы должны сказать taglist плагин о новом типе тега, добавив в файл vimrc:

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

Это работает, если я запускаю ctags из командной строки, но TagList, похоже, не читает файл. Какие-либо предложения? Я использую Windows, если это ключ. – daotoad

+1

@daotoad Я добавил необходимые настройки для vim и обновил конфигурацию ctags, чтобы назначить конкретный тип тега для этих записей. Это должно заставить все работать. –

+0

Спасибо. Я не мог заставить его работать на моем компьютере, поэтому я попробовал его на новой виртуальной машине, и он работал нормально.Теперь, когда я знаю, что ваш код работает нормально, я знаю, где искать дальше. Еще раз спасибо! –

5

Джефф, я попробовал ваш код, но он не работает для меня с синтаксисом использовать. Это может быть проблема с версией? Я использую exuberant ctags версии 5.8.
Я также немного изменил регулярное выражение, потому что кавычки являются необязательными, и вы можете разрешить пробелы (но ничего больше), предшествующие ключевому слову «есть».
Вот что сработало для меня. Я создал файл $ 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.

Кроме того, я считаю, это также полезно иметь информацию о родительском классе, роли и используемые модули отображаются в taglist, так вот мой полный $ 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 (вы можете изменить порядок тегов в taglist, просто изменив порядок в 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 , который заставляет taglist показывать только теги текущий выбранный файл.
Чтобы временно скрыть некоторые теги, вы всегда можете переместить курсор на имя тега и нажать «zc» (и «zo», чтобы снова открыть).