我通常会find-grep-dired
在项目目录中查找表达式。这给了我一个包含该表达式的所有文件的良好{{1}}视图。但我的下一步总是打开其中一个文件并使用相同的搜索表达式执行dired
。如何保存自己每次输入两次搜索单词(如果我想编辑多个文件,可以输入两次以上)?
答案 0 :(得分:5)
这应该适合你:
find-grep-dired
dired-do-search
。出现提示时,按 M-p ,而不是键入,这将显示find-grep regexp,因为两个函数都使用相同的提示历史记录列表如果你想一次性完成所有这一切,那么你去吧:
(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
后面的数字,或者完全省略该部分。