Emacs find-grep-dired然后在给定的regexp上自动isearch-forward

时间:2011-02-11 13:11:21

标签: emacs grep dired

我通常会find-grep-dired在项目目录中查找表达式。这给了我一个包含该表达式的所有文件的良好{​​{1}}视图。但我的下一步总是打开其中一个文件并使用相同的搜索表达式执行dired。如何保存自己每次输入两次搜索单词(如果我想编辑多个文件,可以输入两次以上)?

3 个答案:

答案 0 :(得分:5)

这应该适合你:

  1. 照常运行find-grep-dired
  2. * t (dired-toggle-marks)标记所有文件。
  3. A 启动dired-do-search。出现提示时,按 M-p ,而不是键入,这将显示find-grep regexp,因为两个函数都使用相同的提示历史记录列表
  4. 您将进入第一个文件中的第一场比赛。这是有趣的部分,只需按 M - ,即可转到所有匹配文件的下一场比赛。
  5. 利润? (抱歉,无法抗拒)
  6. 如果你想一次性完成所有这一切,那么你去吧:

    (defun find-grep-dired-do-search (dir regexp)
      "First perform `find-grep-dired', and wait for it to finish.
    Then, using the same REGEXP as provided to `find-grep-dired',
    perform `dired-do-search' on all files in the *Find* buffer."
      (interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
      (find-grep-dired dir regexp)
      (while (get-buffer-process (get-buffer "*Find*"))
        (sit-for 1))
      (with-current-buffer "*Find*"
        (dired-toggle-marks)
        (dired-do-search regexp)))
    

答案 1 :(得分:3)

您可以将您在find-grep-dired中使用的搜索字符串存储在kill ring(C-SPACE C-a M-w)中。然后使用kill ring(C-s M-y)中的字符串在文件中搜索。 M-y会猛拉最后一串被杀死的文字。

您可以使用C-h k C-s显示isearch-forward的其他(有用)绑定。

答案 2 :(得分:2)

不同的方法怎么样?尝试使用igrep.el包中的M-x igrep-find

默认情况下,它会搜索模式的所有次出现,但您可以将行为更改为仅查找第一个此类事件:

(setq igrep-options "-i -m 1")   ;; I like -i for case-insensitivity

这将导致编译样式缓冲区(名为*igrep*),每个文件都有一行,当您单击该行时(或者执行 Cx` < / kbd>),你将自动被放在有匹配的行上。另外,您可以在*igrep*缓冲区中看到匹配的行。

显然,如果您希望每个文件看到多个匹配项,请更改-m后面的数字,或者完全省略该部分。