2011-02-11 47 views
3

我通常做find-grep-dired在项目目录中查找表达式。这给了我一个很好的包含该表达式的所有文件的dired视图。但是我的下一步总是打开其中一个文件,并使用相同的搜索表达式执行isearch-forward。我怎样才能让自己不用每次输入两次搜索词(或者如果有多个文件需要编辑,可以输入两次以上)?Emacs find-grep-dired然后在给定的正则表达式自动isearch-forward

回答

5

这应该为你工作:

  1. 运行find-grep-dired像往常一样
  2. * T(dired-切换的标志),以纪念所有文件。
  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))) 
+1

`dired-do-search`在dired缓冲区中绑定到`A`。 – ataylor 2011-02-11 19:05:07

+0

谢谢,我做了编辑。 – 2011-02-13 02:09:47

3

您可以将您在find-grep-dired中使用的搜索字符串存储在杀戒(C-SPACE C-a M-w)中。然后,您使用杀戒中的字符串(C-s M-y)在文件中进行搜索。 M-y会抽出最后一串杀死的文本。

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

+0

谢谢,这是一种方式,当然。我希望能少一些牵涉其中的东西,比如单个绑定到最后一个搜索字符串的isearch。 – 2011-02-11 15:35:25

2

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

默认情况下,它会搜索所有出现的格局,但你可以改变行为,只要找到第一个事故发生有:

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

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

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