首页 > 解决方案 > 在 ack 中,我可以定义一个受扩展名和第一行限制的类型(两个过滤器类型)吗?

问题描述

如果我理解正确(从Defining your own types in 中ack --man),当我使用--type-setin .ackrc(或在命令行)时,我只能使用一个“filtertype”。就我而言,我想匹配具有特定扩展名且第一行中也存在模式的文件。我想象它看起来像这样(也许--type-set中间没有:

--type-set
mytype:firstlinematch:my.regex.pattern...
--type-set
mytype:ext:myextension

但是,如果我这样做,则忽略 linematch,因为类型被第二个条目替换。*

我知道 允许多个条目--type-add,但这意味着这个或那个条件必须为真,而不是限制在两者都为真时。

对于这种情况,有没有办法使用两种过滤器类型来缩小范围?

标签: configurationconfigack

解决方案


用作--type-add第二个定义没有限制。如果定义foo文件类型如下:

ack --type-set foo:.txt --foo bar

这将查找txt文件中bar某处的所有文件。如果添加到此文件类型设置第一行匹配:

ack --type-set foo:.txt --type-add foo:firstlinematch:/pr.*t/ --foo bar

这将文件类型重新定义为所有 txt 文件以及在其第一行中包含正则表达式 /pr.*t/ 的任何文件。因此,它会在该文件集中找到所有bars。换句话说,type-add就是s 添加到文件的定义中。man 文件明确表示:

“类型规范可以重复,并且可以一起进行或运算。”


推荐阅读