ack — привязка фактического имени файла к типу файла

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

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

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

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

--[no]buildr     .buildfile  .rake

Возможность ограничиться определенным именем файла была бы очень полезна для меня, поскольку существует множество вариантов использования xml (например, ant build.xml или mvn pom.xml), для которых это было бы идеально. Я вижу, что бинарные файлы, файлы Makefile и Rakefile имеют специальную конфигурацию типов, и, возможно, это правильный путь. Я действительно хотел бы иметь возможность сделать это в ack, если это возможно, прежде чем прибегать к пользовательским функциям. Кто-нибудь знает, возможно ли это?


ack
person sgargan    schedule 29.02.2012    source источник


Ответы (1)


Нет, вы не можете этого сделать. 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)/

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

person Andy Lester    schedule 01.03.2012
comment
Извиняюсь за криопост, но если я вставлю это в свой .ackrc: --type-add=mvn,is,pom.xml то получу %> ack --mvn org invalid filter specification 'mvn,is,pom.xml' at /System/Library/Perl/5.18/Getopt/Long.pm line 589. Unknown option: mvn - person Bruce Edge; 22.11.2014
comment
Вы хотите --type-add=mvn:is:pom.xml. См. ack --dump примеры. - person Andy Lester; 24.11.2014
comment
Обратите внимание, что вы можете добавить несколько спецификаций, чтобы использовать :is: и :ext: для одного и того же типа, например, --type-set build:ext:gradle --type-add buid:is:module-info.java. (@AndyLester рассмотрите возможность редактирования ответа, поскольку версия 2.0 уже созрела.) - person Joshua Goldberg; 01.02.2019