在emacs中更改默认的find-grep命令

时间:2015-03-07 13:28:59

标签: linux emacs fish

当我在emacs中执行find-grep命令时,我得到find . -type f -exec grep -nH -e {} +,因为我使用fish shell作为默认shell,为了使这个命令工作,我必须执行{{1} }。

我尝试修改emacs源代码,下面是我的更改:

find . -type f -exec grep -nH -e \{\} +第12669行:/usr/share/emacs/24.4/lisp/ldefs-boot.el

If `exec-plus' use `find -exec \{\} +'.第12669行:/usr/share/emacs/24.4/lisp/loaddefs.el

但是,当我执行If `exec-plus' use `find -exec \{\} +'.仍显示find-grep时,它没有任何意义。任何人都可以告诉我我做错了什么或者我该怎么弄清楚这个?

4 个答案:

答案 0 :(得分:3)

您更改的文字看起来不像可执行代码。可能你刚刚更改了一个文档字符串(实际上,一些谷歌搜索显示这是在grep-find-use-xargs的文档字符串中)。但是Emacs非常可定制;您所要做的就是将grep-find-template的值设置为更适合您个人的内容,.emacs/init.el或类似内容。

(setq grep-find-template
      "find . <X> -type f <F> -exec grep <C> -nH -e <R> \\{\\} +")

有关更多文档,请参阅the manual,当然还有内置文档( ctrl-h v grep-find-template RET )。

实际源代码位于http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/progmodes/grep.el#n174

答案 1 :(得分:3)

您需要使用函数grep-apply-setting来设置变量grep-find-command,并在大括号前加倍反斜杠:

(grep-apply-setting 'grep-find-command "find . -type f -exec grep -nH -e  \\{\\} +")

答案 2 :(得分:3)

(grep-apply-setting 'grep-find-command '("find . -type f -exec grep -nH -e  \\{\\} +" . 34))

将光标放在-e

之后

答案 3 :(得分:1)

如果要保留原始值,可以执行以下操作。它将找到不超过两个目录级别的文件,这些文件不是emacs备份文件,并且在过去一周中已被修改。

(defun grep-find-newer-shallow ()
  (interactive)
  (let ((gfc grep-find-command))
    (grep-apply-setting 'grep-find-command '("find . -maxdepth 2 -type f ! -name '*#' -mtime -7 -exec grep -nH -e  \\{\\} +" . 69))
    (call-interactively 'grep-find)
    (grep-apply-setting 'grep-find-command gfc)))