5

我通常会find-grep-dired在项目目录中查找表达式。这让我可以很好dired地查看包含该表达式的所有文件。但我的下一步总是打开其中一个文件并isearch-forward使用相同的搜索表达式。如何避免每次输入两次搜索词(如果我要编辑多个文件,则输入两次以上)?

4

3 回答 3

7

这应该适合你:

  1. find-grep-dired像往常一样运行
  2. * t(dired-toggle-marks) 标记所有文件。
  3. A 开始dired-do-search。出现提示时,不要键入,而是按M-p,这将显示您的 find-grep 正则表达式,因为这两个函数使用相同的提示历史列表
  4. 您将被带到第一个文件中的第一个匹配项。这是有趣的部分,只需按下M-,即可转到包含所有匹配文件的下一个匹配项。
  5. 利润?(对不起,无法抗拒)

如果您想一口气完成所有操作,请执行以下操作:

(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)))
于 2011-02-11T15:47:38.757 回答
3

您可以将您在 find-grep-dired 中使用的搜索字符串存储在 kill ring (C-SPACE Ca Mw) 中。然后,您使用来自 kill ring (Cs My) 的字符串在文件中进行搜索。我会抽出最后一串被杀死的文本。

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

于 2011-02-11T14:18:20.737 回答
2

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

默认情况下,它会搜索所有出现的模式,但您可以更改行为以查找第一个这样的出现:

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

这将产生一个编译样式缓冲区(名为*igrep*),每个文件只有一行,当您单击该行(或 do C-x `)时,您将自动被放在具有匹配项的行上。*igrep*另外,您可以在缓冲区中看到匹配的行。

显然,如果您想在每个文件中查看多个匹配项,请更改 之后的数字-m,或完全省略该部分。

于 2011-02-11T18:03:54.043 回答