定义自定义emacs find-grep快捷方式

时间:2016-01-22 21:45:07

标签: linux bash shell emacs

Emacs支持M-x find-grep搜索字符串并打开两个缓冲区。一个带有搜索结果的缓冲区和另一个缓冲区打开包含搜索字符串的文件。

目前M-x find-grep扩展为以下命令Run find (like this): find . -type f -exec grep -nH -e {} +

如何修改find​​-grep(或定义新的快捷方式?),为grep和find命令添加更多选项

(例如,忽略日志文件或仅包含java文件find . -iname '*.java'

2 个答案:

答案 0 :(得分:1)

快速而肮脏的方式是前缀find-grep,即C-u M-x find-grep。它允许您在执行命令之前编辑命令行。

如果要永久更改它,可以定义包装器。这适用于rgrep,但find-grep应该相似。

(defvar grep-context-lines 2
  "Default number of context lines (non-matching lines before and
  after the matching line) for `rgrep-context'.")

(defun rgrep-context (arg)
  "Like `rgrep', but adds a '-C' parameter to get context lines around matches.

Default number of context lines is `grep-context-lines', and can
be specified with a numeric prefix."
  (interactive "p")
  (setq arg (or arg grep-context-lines))
  (let ((grep-find-template
         (format "find <D> <X> -type f <F> -print0 | xargs -0 -e grep <C> -nH -C %d -e <R>"
                 arg))
        grep-host-defaults-alist
        current-prefix-arg)
    (call-interactively 'rgrep)))

注意:您的grep-find-template可能不同;如果你修改默认值而不是复制这个默认值,你可能最好。默认值由grep-compute-defaults生成。

答案 1 :(得分:0)

请勿修改find-grep。编写自己的类似命令。如果您愿意,可以从其代码的副本开始。而不是调用程序find来实现find . -type f -exec grep -nH -e () +的部分,而是替换您自己的首选命令行。简化并适应品味(例如,find . -iname '*.java')。

findgrep都有自己的语言(语法) - find。要使用它们,您需要知道(1)您要做的事情以及(2)如何使用他们的语言来做到这一点。

除非您准确指定要执行的操作,否则我们在此处提供的唯一帮助是有关从Emacs调用findgrep的一般指导。为此,find-grep代码是一个很好的指南 - 见上文。