2012-02-29 3 views
4

Для меня ack - это необходимый комплект (его псевдоним, и я использую его миллион раз в день). В основном у него есть все, что мне нужно, поэтому я полагаю, что это поведение покрыто, и я просто не могу его найти.ack - привязка фактического имени файла к файловому типу

Я хотел бы иметь возможность ограничить его конкретными типами файлов с помощью типа. проблема в том, что эти файлы имеют полное имя файла, а не расширение. Например, я хотел бы ограничить его сборкой файлов для buildr, чтобы я мог их искать с помощью --buildr (Аналогично применимо для mvn poms). У меня есть следующий определенный в моем .ackrc

--type-set=buildr=buildfile,.rake 

Проблема в том, что «Buildfile» является полным именем файла, а не расширение, и я хотел бы ПДТ, чтобы полностью соответствовать по этому имени. Однако, если я смотрю на типы, связанные с 'buildr', это показывает, что .buildfile является расширением, а не всем именем файла.

--[no]buildr  .buildfile .rake 

Возможность ограничения для конкретного файла будет очень полезно для меня, поскольку существует множество XML usecases (например, муравей build.xml или МВН pom.xml), что было бы идеальным для. Я вижу, что двоичные, Makefiles и Rakefiles имеют специальную конфигурацию типа, и, возможно, это путь. Я действительно хотел бы иметь возможность сделать это, если возможно, прежде чем прибегать к пользовательским функциям. Кто-нибудь знает, возможно ли это?

ответ

4

Нет, вы не можете этого сделать. ack 1.x использует только расширения для определения типов файлов. Ack 2.0 будет иметь гораздо более гибкие возможности, где вы будете в состоянии сделать такие вещи, как:


# There are four different ways to match 
# is: Match the filename exactly 
# ext: Match the extension of the filename exactly 
# match: Match the filename against a Perl regular expression 
# firstlinematch: Match the first 80 characters of the first line 
# of text against a Perl regular expression. This is only for 
# the --type-add option. 


--type-add=make:ext:mk 
--type-add=make:ext:mak 
--type-add=make:is:makefile 
--type-add=make:is:gnumakefile 


# Rakefiles http://rake.rubyforge.org/ 
--type-add=rake:is:Rakefile 

# CMake http://www.cmake.org/ 
--type-add=cmake:is:CMakeLists.txt 
--type-add=cmake:ext:cmake 

# Perl http://perl.org/ 
--type-add=perl:ext:pod 
--type-add=perl:ext:pl 
--type-add=perl:ext:pm 
--type-add=perl:firstlinematch:/perl($|\s)/ 

Вы можете увидеть, что развитие на 2.0 ACK делает в https://github.com/petdance/ack2. Я хотел бы помочь.

+0

Извинения за cryopost, но если я поместил это в свой .ackrc: '--type-add = mvn, is, pom.xml' Я получаю'%> ack --mvn org недопустимый параметр фильтра 'mvn, is, pom.xml 'at /System/Library/Perl/5.18/Getopt/Long.pm строка 589. Неизвестный вариант: mvn' –

+1

Вы хотите, чтобы '--type-add = mvn: is: pom.xml'. См. «Ack --dump» для примеров. –