当焦点在缓冲区列表中时,如何在其他窗口中实时显示缓冲区内容

时间:2014-10-16 16:49:38

标签: emacs buffer switching

我有2个窗口,一个是缓冲区列表,当我在缓冲区列表中使用n和p进行导航时,如何在其他窗口的缓冲区列表中显示缓冲区? 非常感谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确的问题,答案就是在缓冲区菜单中使用C-o。在另一个窗口中显示您所在行的缓冲区,但它不会选择该缓冲区。也就是说,它不会将输入焦点移动到该缓冲区的窗口。缓冲区列表保留输入焦点,因此您可以继续在不同的行上使用C-o来显示不同的缓冲区。

如果您在说“框架”时表示Emacs窗口,请参见上文。即使缓冲区位于不同的帧上也是如此,但需要注意的是:某些窗口管理器(包括MS Windows)将输入焦点更改为创建的新帧。因此,例如,如果您有非nil pop-up-frames(以便使用单独的帧来显示缓冲区),以及您选择显示的缓冲区(使用C-o)在某些其他帧中尚未显示,然后显示它不仅会为其创建新帧,还会将焦点移动到新帧。如果缓冲区已在另一帧中可见,则C-o只会提升该帧。

当前缓冲区列表显示中没有键绑定,以(a)向下或向上移动光标到下一个或上一个缓冲行,以及(b)调用显示缓冲区的C-o行为在目标缓冲行上命名。但您可以轻松定义此类命令并将其绑定到密钥:

(defun show-next (arg)
  "Show next line's buffer in another window."
  (interactive "p")
  (next-line arg)
  (Buffer-menu-switch-other-window))

(defun show-previous (arg)
  "Show previous line's buffer in another window."
  (interactive "p")
  (previous-line arg)
  (Buffer-menu-switch-other-window))

(define-key Buffer-menu-mode-map "\M-n" 'show-next)
(define-key Buffer-menu-mode-map "\M-p" 'show-previous)

答案 1 :(得分:0)

这是我在dired缓冲区中使用此功能的原型。它访问后会杀死一个缓冲区。

这是我喜欢的ranger文件管理器功能,在浏览目录时很方便。

(setq show-next-current-buffer nil)

(defun show-next ()
     (interactive)
     (next-line 1)
     (dired-find-file-other-window)
     (if show-next-current-buffer (kill-buffer show-next-current-buffer))
     (setq show-next-current-buffer (current-buffer))
     (other-window 1)
     )

(defun show-previous ()
     (interactive)
     (previous-line 1)
     (dired-find-file-other-window)
     (if show-next-current-buffer (kill-buffer show-next-current-buffer))
     (setq show-next-current-buffer (current-buffer))
     (other-window 1)
     )

(define-key dired-mode-map "n" 'show-next)
(define-key dired-mode-map "p" 'show-previous)

编辑:我已经编写了一个次要模式,可以轻松启用/禁用此功能。请参阅https://gitlab.com/emacs-stuff/my-elisp/blob/master/dired-show.el并根据您的需要进行融合。