2013-12-16 6 views
21

Можно ли игнорировать несколько каталогов в Ack, не повторяя флаг?Ack - Игнорирование нескольких каталогов без повторения флага

например. Я знаю, что следующие работы (т.е. установки нескольких флагов):

ack --ignore-dir=install --ignore-dir=php 'teststring' 

Я надеялся, что я мог бы отделить каталоги запятыми, как я могу сделать с расширениями следующим образом:

ack --ignore-file=ext:css,scss,orig 'teststring' 

Однако , следующие разделенные запятой игнорировать флаг не работает:

ack --ignore-dir=install,php 'textstring' 

можно ли использовать некоторые короткие руки эквивалент, так что я не ВГА e для повторного ввода символа -ignore-dir?

ответ

0

Одним из подходов может быть выбор этих каталогов для исключения с помощью регулярного выражения в опции -G, дополненной опцией --invert-file-match. Основываясь на ваш вопрос, что-то вроде следующего:

ack -a -G 'install|php' --invert-file-match 'textstring' . 
+0

Интересно, но я не думаю, что это жизнеспособный в Ack 2. Я получаю следующее сообщение: 'Опция '-a' недействительна в ack 2 Это связано с тем, что теперь у нас есть -k/- известные типы, которые делают его только выбором файлов известных типов, а не любого текстового файла (что является поведением ack 1.x). У вас могут быть параметры в .ackrc или в переменной окружения ACKRC_OPTIONS. Попробуйте использовать флаг -dump' – SparrwHawk

+0

@ Решение Birei работает только с ack 1.x. Флаги -a и -G были удалены в ack 2 в пользу флага -x. –

12

Поскольку вы используете 2 ACK, вы можете положить --ignore-dir=install и --ignore-dir=php в файле .ackrc в корневом каталоге вашего проекта. Затем каждый вызов ack в этом дереве будет использовать эти флаги.

31

Это на самом деле похоже на то, как вы определили бы паттерны включают в grep:

ack <term> --ignore-dir={dir_a,dir_b}

Однако, этот формат не работает с одним каталогом. Так

ack <term> --ignore-dir={log}

не будет работать.

+8

Обратите внимание, что синтаксис {} вызывает расширение bash - это не относится к ack. Попробуйте это в командной строке: 'эхо это классно {1,2}' – AgentLiquid

+0

@AgentLiquid Я этого не знал. Благодаря! :) –

+4

Важно также отметить, что поскольку расширение брекета является специфичной для bash, вы не сможете воспользоваться им в своем файле '.ackrc'. Вместо этого вам нужно будет отдельно указывать каждую опцию '--ignore-dir ='. – wpcarro

5

Так игнорировать одну директорию использовать

ack <term> --ignore-dir=dir_a 

и игнорировать несколько каталогов использовать

ack <term> --ignore-dir={dir_a,dir_b} 
Смежные вопросы