2010-02-02 21 views
6

Tôi đang chỉnh sửa các gói sử dụng Moose và tôi đã tự hỏi liệu có một plugin để tạo thuộc tính Moose hiển thị trong Danh sách thẻ hay không.Có plugin vim nào làm cho thuộc tính Moose hiển thị trong Tag_List không?

Ví dụ, trong đoạn mã sau, thuộc tính options không hiển thị trong Tag_List, nhưng print_out_site làm:

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 :: Thuộc tínhTrợ giúp không được chấp nhận; sử dụng Moose :: Meta :: Attribute :: Native :: Trait :: *. – Ether

+0

Cảm ơn. Tôi biết điều đó, nhưng đây là mã "kế thừa". ;) –

Trả lời

5

Thêm dòng

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

tới ~/.ctags và nó sẽ xuất hiện. Bạn có thể cần phải tinh chỉnh biểu thức chính quy để tránh các kết quả phù hợp trong các tệp khác hoặc để chứa các định dạng khác nhau cho các khai báo thuộc tính trong các tệp khác.

Điều này mở rộng ctags để nó phát hiện một loại thẻ khác dựa trên cụm từ thông dụng khi phân tích cú pháp tệp perl.

Sau đó, bạn cần phải nói với các plugin taglist về loại thẻ mới bằng cách thêm này để tập tin vimrc của bạn:

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

Điều này làm việc nếu tôi chạy ctags từ dòng lệnh, nhưng TagList dường như không đọc tệp. Bất kỳ đề xuất? Tôi đang sử dụng Windows, nếu đó là một đầu mối. – daotoad

+1

@daotoad Tôi đã thêm các cài đặt cần thiết cho vim và cập nhật cấu hình ctags để chỉ định loại thẻ cụ thể cho các mục nhập này. Điều này sẽ làm mọi thứ hoạt động. –

+0

Cảm ơn. Tôi không thể làm cho nó hoạt động trên máy tính của tôi, vì vậy tôi đã thử nó trong một máy ảo mới và nó hoạt động tốt.Bây giờ tôi biết mã của bạn hoạt động tốt, tôi biết nơi để xem xét tiếp theo. Cảm ơn một lần nữa rất nhiều! –

5

Geoff, tôi đã cố gắng mã của bạn nhưng nó không làm việc cho tôi với cú pháp bạn sử dụng. Đây có phải là sự cố phiên bản không? Tôi đang sử dụng ctags exuberant 5.8.
Tôi cũng sửa đổi regex một chút vì dấu ngoặc kép là tùy chọn và bạn có thể muốn cho phép dấu cách (nhưng không có gì khác) trước từ khóa 'có'.
Đây là những gì hiệu quả đối với tôi. Tôi tạo ra một tập tin $ HOME/.ctags (không có tiểu sử nào, nếu chỉ cần thêm vào nó) với dòng sau:

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

Sau đó thêm dòng trong vimrc như bạn đề nghị

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

Bây giờ, nó liệt kê các thuộc tính của tôi trong mô-đun Moose.

Bên cạnh đó, tôi thấy nó hữu ích cũng có thông tin về các lớp cha mẹ, vai trò và các module sử dụng hiển thị trong taglist, vì vậy đây là hoàn toàn $ HOME/.ctags tập tin của tôi:

--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/ 

và đây là những gì tôi có trong vimrc (bạn có thể thay đổi thứ tự của thẻ trong taglist chỉ đơn giản bằng cách thay đổi trật tự trong 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 

do nội dung bổ sung tôi thấy hữu ích khi sử dụng tùy chọn Tlist_Show_One_File , sẽ buộc danh sách thẻ chỉ hiển thị các thẻ của tệp hiện được chọn.
Để tạm thời ẩn một số thẻ, bạn luôn có thể di chuyển con trỏ đến tên thẻ và nhấn "zc" (và "zo" để mở lại) màn hình đầu tiên.

Các vấn đề liên quan