0

我正在M-x findEmacs 中寻找一个命令,它的行为完全像M-x grep(允许修改命令,很好地打印输出,包括找到的文件的链接,...)并且执行find . -iname '*|*'(光标放在垂直条上 - 对于插入搜索模式——如果实现起来不太复杂)。以前有没有人实施过这个?[我知道M-x find-grep]

4

3 回答 3

3

让我们从M-xfind-dired它几乎可以满足您的要求开始:它从 minibuffer 读取目录,默认为当前目录,然后读取其他find参数。结果以dired模式打开,我认为它可以得到最好的结果(如果您认为这dired太冗长,请查看MELPAdired-details并可能会dired-details+打包)。

现在让我们让它-iname **在询问选项时从星星之间的光标开始。查看find-dired源代码,我们可以看到它使用 的值find-args作为 的初始输入参数read-string。这个论点已经过时和弃用,但非常有用。它的一个特性(正如我们在read-from-minibuffer描述中读到的)是在给出字符串和整数的 cons 时提供默认的点位置。

(defun marius/find-dired ()
  (interactive)
  (let ((find-args '("-iname '**'" . 10)))
    (call-interactively 'find-dired)))

我们在星号周围添加了单引号,'**'因为参数受外壳扩展的影响。

我们没有从 minibuffer 中读取我们自己的参数,而是重新绑定find-args并将所有其余部分委托给find-dired. 通常 find-dired会记住您输入的最后一个参数,find-args因此它们成为新的默认值。重新绑定它let确保我们调用的这种修改find-dired将被丢弃,因此正find-dired则将使用提供给最新 正则 find-dired的参数。如果你不使用 regular 可能没关系find-dired。如果您查找提供给我们包装器的参数以供常规find-dired使用,请改用以下定义:

(defun marius/find-dired ()
  (interactive)
  (setq find-args '("-iname '**'" . 10))
  (call-interactively 'find-dired))
于 2013-01-29T22:30:48.087 回答
1

我认为这find-dired可以满足您的要求(除了它不使用“-iname”初始化命令并让您输入它)。

例如:

  • M-xfind-diredRET (执行find-dired
  • C-j (接受默认目录.:)
  • -iname "*.foo" RET (输入命令行参数)

结果显示在dired缓冲区中。

于 2013-01-29T22:26:01.727 回答
0

你可以从:

(defun eab/find-grep ()
  (interactive)
  (let ((grep-host-defaults-alist nil)
        (grep-find-command
         `(,"find . -iname '**' -type f -print0 | xargs -0 -e grep -nH -m 1 -e \"^\"" . 17)))
    (call-interactively 'find-grep)))

我也使用:

(defun eab/grep ()
  (interactive)
  (let ((grep-host-defaults-alist nil)
        (grep-command
         `(,(concat "grep -i -nH -e  *."
                    (ignore-errors
                      (file-name-extension buffer-file-name))) . 16)))
    (call-interactively 'grep)))

编辑:现在 grep-find-command 默认只搜索每个文件的第一行。

于 2013-01-29T22:10:14.460 回答