确认 - 忽略多个目录而不重复标记

Spa*_*awk 31 ack

是否可以忽略Ack中的多个目录,而不重复标记?

例如,我知道以下工作(即设置多个标志):

ack --ignore-dir=install --ignore-dir=php 'teststring'
Run Code Online (Sandbox Code Playgroud)

我希望我可以用逗号分隔目录,就像我可以使用扩展程序,如下所示:

ack --ignore-file=ext:css,scss,orig 'teststring'
Run Code Online (Sandbox Code Playgroud)

但是,以下逗号分隔的忽略标志不起作用:

ack --ignore-dir=install,php 'textstring'
Run Code Online (Sandbox Code Playgroud)

是否可以使用一些短手等效,所以我不必重复输入--ignore-dir标志?

Man*_*hak 45

它实际上与您指定包含模式的方式类似grep:

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

但是,此格式不适用于单个目录.所以

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

不管用.

  • 请注意,{}语法会导致bash扩展 - 它不是特定于ack的.在你的命令行试试这个:`echo this is cool {1,2}` (12认同)
  • 同样重要的是要指出,因为大括号扩展是特定于bash的特性,所以你将无法在`.ackrc`文件中利用它.相反,您需要单独列出每个`--ignore-dir =`选项. (7认同)

And*_*ter 17

由于您使用的ACK 2,你可以把--ignore-dir=install--ignore-dir=php在你的项目的根.ackrc文件.然后,该树中的每个ack调用都将使用这些标志.


小智 12

所以要忽略单个目录的使用

ack <term> --ignore-dir=dir_a
Run Code Online (Sandbox Code Playgroud)

并忽略多个目录使用

ack <term> --ignore-dir={dir_a,dir_b}
Run Code Online (Sandbox Code Playgroud)


Bir*_*rei 0

一种方法可能是使用选项中的正则表达式并-G用选项补充来选择要排除的目录--invert-file-match。根据您的问题,类似于以下内容:

ack -a -G 'install|php' --invert-file-match 'textstring' .
Run Code Online (Sandbox Code Playgroud)