查找文件:获取由包含文本的过滤器指定的文件的重复缓冲区

StackOverflow https://stackoverflow.com/questions/2088029

  •  21-09-2019
  •  | 
  •  

这似乎是一个非常典型的用例,但如果我能弄清楚的话,我就该死了。我一定缺少一些基本的东西。

find-dired 基本上是 find 命令的前端,它生成结果的 dired 缓冲区

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

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

似乎所有的部分都在那里,但我还没弄清楚。所以我认为这是我可能错过的一些基本的东西。

有帮助吗?

解决方案

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

例如,如果您运行 M-x grep, ,您应该在迷你缓冲区中收到以下提示:

Run grep (like this): grep -n

然后添加要传递给 grep 的正则表达式和 glob 模式:

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

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

其他提示

这是一个有点晚,但这里是与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与不区分大小写的文件名匹配。

我给A.利维信贷。但我认为我想通了。似乎找到-dired确实是工作的工具,但我的Windows机器上不预填充“-exec grep的”的指定参数和它我不明白,我这样做。我的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 \{\} \; 

您(在评论)表示:

  

唯一缺少的是输出到dired缓冲,所以我可以做的事情一样选择/移动/复制一次所有这些文件

对不起,我没有看到这个问题到现在为止。这功能可用与 Dired + 。命令diredp-grepped-files-other-window打开由grep命中指示的文件Dired。 (这也适用于从compilation-mode衍生的任何其它模式。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top