我通常会find-grep-dired
在项目目录中查找表达式。这让我可以很好dired
地查看包含该表达式的所有文件。但我的下一步总是打开其中一个文件并isearch-forward
使用相同的搜索表达式。如何避免每次输入两次搜索词(如果我要编辑多个文件,则输入两次以上)?
1439 次
3 回答
7
这应该适合你:
find-grep-dired
像往常一样运行- 按* t(dired-toggle-marks) 标记所有文件。
- 按A 开始
dired-do-search
。出现提示时,不要键入,而是按M-p,这将显示您的 find-grep 正则表达式,因为这两个函数使用相同的提示历史列表 - 您将被带到第一个文件中的第一个匹配项。这是有趣的部分,只需按下M-,即可转到包含所有匹配文件的下一个匹配项。
- 利润?(对不起,无法抗拒)
如果您想一口气完成所有操作,请执行以下操作:
(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-find
从igrep.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 回答