当我在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
时,它没有任何意义。任何人都可以告诉我我做错了什么或者我该怎么弄清楚这个?
答案 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)))