Как заставить Ack игнорировать файлы jQuery? - PullRequest
11 голосов
/ 17 октября 2011

Я использую Vim + Ack.Vim и не могу понять, как игнорировать попадания в файлы Jquery.У меня определен файл .ackrc (см. Ниже), но я в темноте.

--type-add=ruby=.haml,.rake,.rsel,.builder
--type-add=html=.html.erb,.html.haml
--type-add=js=.js.erb
--type-add=css=.sass
--type-set=cucumber=.feature
--type-add=jquery=jquery*.js
--ignore-dir=vendor
--ignore-dir=log
--ignore-dir=tmp
--ignore-dir=doc
--ignore-dir=coverage
--sort-files
--color
--follow
--group
--nojquery

Как опытные пользователи ack + ack.vim решат эту проблему?

1 Ответ

5 голосов
/ 05 ноября 2011

Интересная проблема!Я могу придумать несколько подходов:

  1. patch ack, чтобы разрешить фильтрацию по шаблонам имен файлов (лучше всего: ack нуждается в этой функции)
  2. изменить ack.vim, чтобы игнорировать определенные шаблоны имен файлов (неконечно, как вы это сделаете)
  3. фильтр вывода ack, с помощью скрипта / программы-оболочки (ломкий / раздражающий выход mck ack)
  4. фильтр входного списка файлов, переданного ack, с оболочкойскрипт / программа (выполнимо)
  5. патч для игнорирования файлов jQuery (хитрый, но работает)

У меня работает последний.Ack написан на Perl, поэтому его довольно легко читать и изменять.Ищите Ack.pm в вашей системе.Я использую Ubuntu 11.10 и установил ack-grep, чтобы получить ack;мой Ack.pm найден на /usr/share/perl5/App/Ack.pm.Если вы установили автономную версию ack, файл, который вы будете редактировать, называется просто «ack».Ищите подпрограмму is_searchable().Вот что я вижу:

sub is_searchable {
    my $filename = shift;

    # If these are updated, update the --help message
    return if $filename =~ /[.]bak$/;
    return if $filename =~ /~$/;
    return if $filename =~ m{^#.*#$}o;
    return if $filename =~ m{^core\.\d+$}o;
    return if $filename =~ m{[._].*\.swp$}o;

    return 1;
}

Добавьте еще одну строку сразу после выше return 1;:

    return if $filename =~ /^jquery/;

Опять возвращаясь к моему первому предложению (исправьте ack, чтобы разрешить фильтрацию по шаблонам имен файлов)) Энди может взять для этого патч .

Кстати, вы, наверное, уже поняли это, но использование --type-add не похоже на допустимый синтаксис для подтверждениякомандная строка:

--type-add=jquery=jquery*.js

ожидает только расширения файла.Надеюсь, это поможет!

...