我在Emacs中寻找一个命令M-x find
,其行为与M-x grep
完全相同(允许修改命令,很好地打印输出,包括找到的文件的链接,......)执行find . -iname '*|*'
(光标放在垂直条上 - 用于插入搜索模式 - 如果实现起来不太复杂)。有没有人以前实现过这个? [我知道M-x find-grep
]
答案 0 :(得分:3)
让我们从几乎所需的 M-x find-dired
开始:它从迷你缓冲区读取目录,默认为当前目录,然后读取其他find
个参数。结果以dired
模式打开,我认为它的结果非常好(如果您认为dired
过于冗长,请查看dired-details
,也许dired-details+
包裹在MELPA)。
现在让它以-iname **
开头,当它要求选项时,在星星之间有一个光标。查看find-dired
源代码,我们可以看到它使用find-args
的值作为read-string
的初始输入参数。这个论点已经过时并且已弃用但非常有用。它的一个特性(正如我们在read-from-minibuffer
描述中所读到的那样)是在给出字符串和整数的缺点时提供默认的点位置。
(defun marius/find-dired ()
(interactive)
(let ((find-args '("-iname '**'" . 10)))
(call-interactively 'find-dired)))
我们在'**'
中围绕星号添加了单引号,因为参数受shell扩展限制。
我们不是从迷你缓冲器中读取我们自己的参数
重新绑定find-args
并将所有其余内容委托给find-dired
。一般
find-dired
会记住您在find-args
中输入的最后一个参数
成为新的默认。用let
重新绑定它可以确保这一点
从我们的调用find-dired
的修改将被丢弃,所以
常规find-dired
将使用最新的参数
常规 find-dired
。如果你不使用常规find-dired
,这可能无关紧要。如果想要找到我们的包装器给常规find-dired
使用的参数,请改用以下定义:
(defun marius/find-dired ()
(interactive)
(setq find-args '("-iname '**'" . 10))
(call-interactively 'find-dired))
答案 1 :(得分:1)
我认为find-dired
符合您的要求(除非它没有使用“-iname”初始化命令,并允许您输入它。)
例如:
find-dired
RET (执行find-dired
) .
) -iname "*.foo"
RET (输入命令行参数) 结果显示在dired
缓冲区中。
答案 2 :(得分: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默认只搜索每个文件的第一行。