我正在使用 igrep.el 包并且喜欢它。不过有一件事困扰着我。在 igrep 结果页面中,第一行和最后一行被突出显示为编译的一部分,因此使用 next-error 循环查看结果最终会遇到这两行,当然没有相应的文件。
这些是第一个和最后一个文件的格式:
Igrep started at Thu Aug 1 15:15:23
finished (matches found) at Thu Aug 1 15:15:27
我相信这是负责将这些行一起显示的代码。如何禁止这些行显示在 grep 结果中,或者至少不让它们作为结果的一部分突出显示:
(if igrep-find
(setq command
(igrep-format-find-command command files)))
(cond ((eq igrep-save-buffers t) (save-some-buffers t))
(igrep-save-buffers (save-some-buffers)))
(if (fboundp 'compilation-start) ; Emacs 22
(let ((compilation-process-setup-function 'grep-process-setup))
(or (fboundp 'igrep-mode)
(define-derived-mode igrep-mode grep-mode "Igrep"))
(compilation-start command
'igrep-mode
nil
(cond ((eq compilation-highlight-regexp t))
(compilation-highlight-regexp
(if (eq program "fgrep")
(regexp-quote regex)
regex)))))
(compile-internal command (format "No more %s matches" program)
"Igrep" nil grep-regexp-alist))))
问题是这些行的正则表达式需要“Grep”,而不是“Igrep”。作为快速破解,您可以将那段代码的两个“Igrep”字符串替换为“Grep”。
一个不那么棘手的解决方案是将这些正则表达式的表达式添加到 grep-mode-font-lock-keywords
中。这很容易:只需查看该 var 的当前值并将以“^Grep”开头的正则表达式复制到以“^Igrep”开头的类似正则表达式
我是一名优秀的程序员,十分优秀!