Как мне заставить Ack игнорировать файлы jQuery?

Я использую 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

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

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

Я получил последнюю работу. 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/;

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

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

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

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