emacs中grep-find的默认字符串

时间:2010-01-27 16:31:06

标签: emacs grep dot-emacs

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

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

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

4 个答案:

答案 0 :(得分:8)

grep包预先计算一堆默认值(但不一定在包加载时)。因此,您需要实现这一点,然后重新定义find命令。类似的东西:

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

答案 1 :(得分:7)

如果您使用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")))

答案 2 :(得分:2)

如果您使用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本身忽略某些文件。然后你得到 来自命令行的相同行为。

答案 3 :(得分:0)

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