4

这似乎是一个非常典型的用例,但如果我能弄清楚,我会被诅咒的。我必须缺少一些基本的东西。

find-dired 基本上是 find 命令的前端,它产生结果的 dired-buffer

find-grep-dired 似乎更像是 grep 的前端,而不是 find。并产生一个dired-buffer,但它搜索目录树中的所有文件。

我想要的是能够从给定的路径开始并在 *.css 中搜索 #some-id 并让它给我一个用于进一步处理的 dired-buffer。

似乎所有的碎片都在那里,但我还没有弄清楚。所以我认为这是我可能错过的基本内容。

4

4 回答 4

4

听起来您正在寻找的功能是grep。它将使用您给它的表达式调用 grep 实用程序,并将输出收集到交互式缓冲区中。您可以选择缓冲区中的任何匹配行以跳转到匹配所在文件中的该行。

例如,如果你运行M-x grep,你应该在 mini-buffer 中得到以下提示:

Run grep (like this): grep -n

然后添加要传递给 grep 的 regexp 和 glob 模式:

Run grep (like this): grep -n #some-id *.css

它应该为您提供当前目录中匹配#some-id的所有文件的匹配列表*.css。如果要通过子目录进行递归,则需要使用 rgrep 而不是 grep。这听起来像您正在寻找的东西,还是我完全误解了您的要求?

于 2010-01-18T18:50:01.880 回答
4

这有点晚了,但这是我经常使用的 emacs-lisp 函数:

(defun find-iname-grep-dired (dir pattern regexp)
  (interactive
   "DFind-name (directory): \nsFind-name (filename wildcard): \nsFind-grep (grep regexp): ")
  (find-dired dir (concat "-iname " (shell-quote-argument pattern) " "
                          "-type f -exec " grep-program " " find-grep-options " -e "
                          (shell-quote-argument regexp) " "
                          (shell-quote-argument "{}") " "
                          (shell-quote-argument ";"))))

find-grep-diredfind-name-dired不区分大小写的文件名匹配相结合。

于 2013-08-26T14:40:59.683 回答
1

我会给 A. Levy 信用。但我想我想通了。似乎 find-dired 确实是这项工作的工具,但是在我的 Windows 机器上,它没有用“-exec grep”预先填充 args,而且我也没有意识到这样做。然而,我的 linux 机器确实用 grep 预填充了它。

所以....

  #on Linux
  M-x find-dired
  Run Find in Directory: <current_path> 
  Run find(with args): -type f -exec grep -q -e \{\} \; 

  #on windows
  M-x find-dired
  Run Find in Directory: <current_path> 
  Run find(with args): 

  #Solution
  M-x find-dired
  Run Find in Directory: <current_path> 
  Run find(with args): -type f -iname "*.css" -exec grep -q -e #some-id \{\} \; 
于 2010-01-18T22:59:18.190 回答
1

你说(在评论中):

唯一缺少的是输出到 dired 缓冲区,因此我可以一次执行选择/移动/复制所有这些文件之类的操作

抱歉,直到现在我才看到这个问题。Dired+提供了该功能。命令在命中diredp-grepped-files-other-window指示的文件上打开 Dired grep。(它也适用于从 . 派生的任何其他模式compilation-mode。)

于 2015-06-05T08:48:12.087 回答