带有头盔和/或弹丸的目录中的递归grep?


11

目录中的递归grep应该是最简单的事情,但是我还没有找到使它起作用的方法。我在以下命令之间摇摆,不确定其中是否包含功能:

  • helm-find-files:问题是,这真的很难递归查找目录。
  • projectile-find-dir:这非常适合查找目录!但是,尽管使用了Helm Complete,您也不会进入Helm模式,因此该C-u C-s命令在这里不起作用。
  • helm-find:获得正确的递归,但定位文件,而不是目录
  • helm-projectile-find-dir:似乎是我想要的。

1
我喜欢ag和ag模式,白银搜寻者用一只手绑在其背上击败grep :-),但不知道如何使其具有弹射性,但是
Tom Regner 2015年

Mx投射物-ag也许?(取决于版本
弹头

2
对于原始海报:我不太了解您的目的。射弹-ack和射弹-ag都是(整个)射弹项目中的很好的递归毛刺。他们不是您所需要的吗?
Mekk 2015年

Answers:


10

您有两种方法:

  • 使用helm-projectile-grep/ack/ag:您可以搜索从项目根目录开始的所有内容。以后,如果要保存搜索结果,请按F3或按TAB切换到操作菜单,然后选择第三个操作。要导航hgrep缓冲区:

    • C-<down>:转到下一场比赛并打开比赛。
    • C-<up>:转到上一场比赛并打开比赛。
    • M-<down>:不打开比赛就进入下一场比赛。
    • M-<up>:不打开比赛就进入下一场比赛。
    • C-o:在其他窗口中打开当前比赛。
    • RET:在当前窗口中打开当前比赛。
  • 使用helm-projectile-find-dir(注意helm前缀;helm-projectile通常必须使用软件包中的正确Helm命令):缩小到所需目录,然后按C-u C-s来在该目录中递归搜索。如果您不按C-u,它只会在该目录中搜索而不会更深。

希望能有所帮助。


1
通过在弹丸搜索结果中通知我这个“ TAB”动作,您刚刚使我获得了巨大的收获。谢谢。谢谢你,先生。
Emish

5

目录中的递归grep应该是最简单的事情

对于当前目录中的一个简单的递归grep,只需:M-x grep然后在minibuffer中:Run grep (like this): grep -nHr "pattern"。(注意-r标志)。

您可能也有兴趣rgrep

rgrep是一个在grep.el中的交互式自动加载的已编译Lisp函数

(rgrep REGEXP和可选文件目录确认)

递归grep for REGEXP在根目录为DIR的目录树中的FILES中。搜索仅限于与外壳模式文件FILES匹配的文件名。文件可以使用grep-files-aliases', e.g. enteringch'中定义的缩写,等同于'*。[ch]'。


那与在上下文中应该是的弹丸没有关系。
RichieHH 19/12/26

2

除了其他答案中提到的工具外,另一个很酷的功能是find-grep-dired创建一个dired缓冲区,其中包含与递归grep模式匹配的所有文件。

它只是运行find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -ls并将结果显示在dired缓冲区中。


1

你可以试试看helm-do-grep。如Helm Wiki中所述,使用前缀arg调用将为您提供递归grep 。

如果您想递归地启动helm-do-grep而不启动helm-find-files,请执行以下操作:

Cu舵机命令前缀键Mg

注意:如果您忘记在Mg之前击打Cu,则可以在选择文件后执行。

系统将提示您选择要搜索的文件类别:例如,使用* .el之类的通配符语法(仅搜索.el文件)。

默认情况下,当光标位于文件名上时,使用点的文件扩展名。如果光标位于目录的根目录下,则该目录中找到的所有不匹配grep-find-ignored-files的文件扩展名都会插入提示中。

像这样尝试:

C-u helm-command-prefix-key M-g s


0

helm-projectile-find-dir可能是正确的功能。您可以

  1. 查找目录,如 projectile-find-dir
  2. 但是随后您完成了Helm模式,可以在其中运行C-u C-s所需的递归搜索。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.