这是我运行rgrep
时缓冲区的样子。我想看看我的结果 - 所有其他信息对我来说毫无意义。
-*- mode: grep; default-directory: "~/.emacs/" -*-
Grep started at Sat Jan 20 12:42:21
grep --exclude=.\#\* --exclude=\*.o --exclude=\*\~ --exclude=\*.bin --exclude=\*.lbin --exclude=\*.so --exclude=\*.a --exclude=\*.ln --exclude=\*.blg --exclude=\*.bbl --exclude=\*.elc --exclude=\*.lof --exclude=\*.glo --exclude=\*.idx --exclude=\*.lot --exclude=\*.fmt --exclude=\*.tfm --exclude=\*.class --exclude=\*.fas --exclude=\*.lib --exclude=\*.mem --exclude=\*.x86f --exclude=\*.sparcf --exclude=\*.dfsl --exclude=\*.pfsl --exclude=\*.d64fsl --exclude=\*.p64fsl --exclude=\*.lx64fsl --exclude=\*.lx32fsl --exclude=\*.dx64fsl --exclude=\*.dx32fsl --exclude=\*.fx64fsl --exclude=\*.fx32fsl --exclude=\*.sx64fsl --exclude=\*.sx32fsl --exclude=\*.wx64fsl --exclude=\*.wx32fsl --exclude=\*.fasl --exclude=\*.ufsl --exclude=\*.fsl --exclude=\*.dxl --exclude=\*.lo --exclude=\*.la --exclude=\*.gmo --exclude=\*.mo --exclude=\*.toc --exclude=\*.aux --exclude=\*.cp --exclude=\*.fn --exclude=\*.ky --exclude=\*.pg --exclude=\*.tp --exclude=\*.vr --exclude=\*.cps --exclude=\*.fns --exclude=\*.kys --exclude=\*.pgs --exclude=\*.tps --exclude=\*.vrs --exclude=\*.pyc --exclude=\*.pyo -i -nH -e grep *.el
init.el:236:(global-set-key (kbd "s-f") 'rgrep)
init.el:237:(global-set-key (kbd "C-f") 'lgrep)
Grep finished (matches found) at Sat Jan 20 12:42:21
答案 0 :(得分:12)
标题插入位于compilation-start
内rgrep
深处的调用中。没有一种简单的方法可以防止这些函数插入标题。但是你可以通过定义建议很容易地隐藏缓冲区的前四行。
(defun delete-grep-header ()
(save-excursion
(with-current-buffer grep-last-buffer
(goto-line 5)
(narrow-to-region (point) (point-max)))))
(defadvice grep (after delete-grep-header activate) (delete-grep-header))
(defadvice rgrep (after delete-grep-header activate) (delete-grep-header))
您可以稍后加宽以使用 C-x n w 显示这些行。
如果您还想建议lgrep
,grep-find
和zrgrep
,可以将上面的defadvice
宏替换为这样的程序化建议:
(defvar delete-grep-header-advice
(ad-make-advice
'delete-grep-header nil t
'(advice lambda () (delete-grep-header))))
(defun add-delete-grep-header-advice (function)
(ad-add-advice function delete-grep-header-advice 'after 'first)
(ad-activate function))
(mapc 'add-delete-grep-header-advice
'(grep lgrep grep-find rgrep zrgrep))
答案 1 :(得分:1)
Michael Hoffman的一个小补充:我们可以在grep缓冲区中添加一个小按钮来切换隐藏文本:
(defmacro with-grep-buffer-writable (&rest body)
`(save-excursion
(with-current-buffer grep-last-buffer
(setq buffer-read-only nil)
,@body
(setq buffer-read-only t))))
(defun hide-grep-header (&rest ignored)
"Hides (by narrowing) the first few lines of a grep buffer leaving only
the results. Additionally, a button is created to toggle the lines."
(with-grep-buffer-writable
;;HACK: If we (goto-line 5), the button is inserted *after* the results.
(goto-line 4)
(end-of-line)
(insert "\n")
(narrow-to-region (point) (point-max))
(insert-text-button "(...)"
'help-echo "Toggle display of grep invocation"
'action #'click-show-grep-button)))
(defun click-hide-grep-button (button)
(with-grep-buffer-writable
(button-put button 'action #'click-show-grep-button)
(narrow-to-region (button-start button) (point-max))))
(defun click-show-grep-button (button)
(with-grep-buffer-writable
(button-put button 'action #'click-hide-grep-button)
(widen))
; HACK: goto-line won't have any effect because of save-excursion
(with-current-buffer grep-last-buffer
(goto-line 1)))
(advice-add 'grep :after #'hide-grep-header)
(advice-add 'rgrep :after #'hide-grep-header)
答案 2 :(得分:0)
(defun my/grep-fix ()
(save-excursion
(let ((inhibit-read-only t))
(goto-line 4)
(kill-whole-line))))
(add-hook 'grep-setup-hook 'my/grep-fix)
此解决方案:
next-error
配合得很好(即,它不会跳过第一个匹配项);