هل هناك مكون إضافي VIM يجعل سمات Moose تظهر في TAG_LIST؟

StackOverflow https://stackoverflow.com/questions/2182164

  •  24-09-2019
  •  | 
  •  

سؤال

أقوم بتحرير الحزم التي تستخدم موس ، وكنت أتساءل عما إذا كان هناك مكون إضافي لجعل سمات موس تظهر في قائمة العلامات.

على سبيل المثال ، في الكود التالي ، السمة 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");
}
هل كانت مفيدة؟

المحلول

أضف الخط

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

نصائح أخرى

جيف ، جربت الكود الخاص بك ولكنه لم ينجح بالنسبة لي مع بناء الجملة الذي تستخدمه. هل يمكن أن تكون هذه مشكلة في الإصدار؟ أنا أستخدم إصدار CTAGS المفرط 5.8.
لقد قمت أيضًا بتعديل regex قليلاً لأن الاقتباسات اختيارية وقد ترغب في السماح للمساحات (ولكن لا شيء آخر) التي تسبق الكلمة الرئيسية ".
هنا ما نجح بالنسبة لي. لقد قمت بإنشاء ملف $ 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'

الآن يسرد سماتي في وحدات موس.

بالإضافة إلى ذلك ، أجد أنه من المفيد أيضًا الحصول على معلومات حول فئة الأصل والأدوار والوحدات المستخدمة في قائمة 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 (يمكنك تغيير ترتيب العلامات في قائمة TAGRING ببساطة عن طريق تغيير الطلب في 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" لإعادة فتح) الطية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top