emacs 中 grep-find 的默认字符串

Posted

技术标签:

【中文标题】emacs 中 grep-find 的默认字符串【英文标题】:Default string for grep-find in emacs 【发布时间】:2010-01-27 16:31:05 【问题描述】:

我经常在 emacs 中使用命令 grep-find 来搜索我的源文件,但它总是在临时文件和备份文件等中找到匹配项。 grep-find 的默认命令是:

find . -type f -print0 | xargs -0 -e grep -nH -e

我知道我可以在运行它之前对其进行修改以满足我的需求,但是我如何更改它以使其在启动时正确?

【问题讨论】:

【参考方案1】:

grep 包预先计算了一堆默认值(但不一定在包加载时)。因此,您会希望实现这一点,然后然后重新定义 find 命令。比如:

(grep-compute-defaults)
(setq grep-find-command "find . ! -name \"*~\" ! -name \"#*#\" -type f -print0 | xargs -0 -e grep -nH -e ")

【讨论】:

我不得不在 Emacs 24 中使用 grep-apply-setting(grep-apply-setting 'grep-find-command "find . ! -name \"*~\" ! -name \"#*#\" -type f -print0 | xargs -0 -e grep -nH -e ")【参考方案2】:

如果你使用 lgrep 或 rgrep 代替 grep-find,你可以提前设置忽略的文件/目录:

(eval-after-load "grep"
  '(progn
    (add-to-list 'grep-find-ignored-files "*.tmp")
    (add-to-list 'grep-find-ignored-directories "_darcs")))

【讨论】:

我将".min.js" 添加到grep-find-ignored-files,但rgrep 不尊重它。我仍然得到 *.min.js 文件的结果。 谢谢!对于helm-ag 也很有用,它也使用grep-find-ignored* 变量的设置。我没有添加到现有列表中,而是选择像 (customize-set-variable 'grep-find-ignored-directories (list "SCCS" "RCS" "CVS" "MCVS" ".svn" ".git" ".hg" ".bzr" "_MTN" "_darcs" "arch" "objects" "build" "bin" "out" "lib")) 那样对其进行硬连线【参考方案3】:

如果您使用 GNU grep,另一个不错的解决方案是在您的 .bashrc 中添加类似的内容

export GREP_OPTIONS="--exclude=*#* --exclude=*.svn* --exclude=entries --exclude=all-wcprops --exclude=*.xcuserstate --exclude=project.pbxproj --exclude=*.svn-base --exclude=*.tmp"

然后告诉 grep 自己忽略某些文件。然后你得到 命令行中的行为也相同。

【讨论】:

【参考方案4】:

看看当前的 emacs 开发版本是如何处理它的——它提供了大量的排除模式。

【讨论】:

如果列表很大,他们会避免在迷你缓冲区中列出完整的命令吗?我真的不需要每次搜索时都看到它。 a) 试试看; b) 是的,他们确实避免将其列在 minibuffer 中。但是,它确实显示在 *grep* 缓冲区的顶部(即输出所在的位置),而且非常大。

以上是关于emacs 中 grep-find 的默认字符串的主要内容,如果未能解决你的问题,请参考以下文章

Emacs术语模式:通过双击鼠标选择单词

如何将git的默认编辑器替换为emacs

emacs笔记

9.Emacs进阶之文本模式大纲模式

默认情况下,使emacs以控制台模式(-nw)运行

bash,emacs绑定的数字前缀?