在emacs中,当我执行grep查找时,如何让显示给我的文件在与grep输出相同的帧中打开,而不是在不同的帧中打开?

在emacs中,当我执行grep查找时,如何让显示给我的文件在与grep输出相同的帧中打开,而不是在不同的帧中打开?,emacs,Emacs,我在my.emacs中添加了add to list'same window buffer names'*grep*“,以便从grep find中获得输出,并在同一个缓冲区IM-x grep find中显示。但在我得到grep的输出后,说: -*- mode: grep; default-directory: "~/sandbox/" -*- Grep started at Sat Sep 1 17:01:38 find . -type f -print0 | xargs -0 -e grep

我在my.emacs中添加了
add to list'same window buffer names'*grep*“
,以便从
grep find
中获得输出,并在同一个缓冲区I
M-x grep find
中显示。但在我得到grep的输出后,说:

-*- mode: grep; default-directory: "~/sandbox/" -*-
Grep started at Sat Sep  1 17:01:38

find . -type f -print0 | xargs -0 -e grep -nH -e vector
./main.cpp:4:#include <vector>
./typelist.cpp:2:#include <vector>
./main.cpp.eulerbak:4:#include <vector>
-*-模式:grep;默认目录:“~/sandbox/”-*-
Grep于9月1日星期六17:01:38开始
找到-类型f-print0 | xargs-0-e grep-nH-e向量
/main.cpp:4:#包括
/类型列表。cpp:2:#包括
./main.cpp.eulerbak:4:#包括

如果我在其中一个上按enter键,比如typelist.cpp:2,它将水平分割我的缓冲区并在那里打开它,切换到该文件中包含include的行..有没有办法不分割我的缓冲区并在grep缓冲区上打开它?这将使我很容易杀死缓冲区并返回grep结果。

将其添加到init文件中

(eval-when-compile (require 'cl))
(defun kill-grep-window ()
  (destructuring-bind (window major-mode)
      (with-selected-window (next-window (selected-window))
        (list (selected-window) major-mode))
    (when (eq major-mode 'grep-mode)
      (delete-window window))))

(add-hook 'next-error-hook 'kill-grep-window)

或者,您可以在新的帧中键入
C-x40
,这将同时杀死缓冲区和窗口。这非常有效,令人惊讶!谢谢你们用的是什么版本的emacs?我使用的是24.1,这不会改变我的
grep
的新帧行为:(我已经调整了代码。另外,当你谈论Emacs时,你需要调整你的术语,这样每个人都可以在同一个页面上。你的“框架”是指“窗口”,我想是吧?谢谢你的回复和更新代码。当我在
grep find
结果上按enter键时,我确实得到了一个全新的emacs框架。结果证明这是一个有效的解决方案。