我有2个窗口,一个是缓冲区列表,当我在缓冲区列表中使用n和p进行导航时,如何在其他窗口的缓冲区列表中显示缓冲区? 非常感谢。
答案 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并根据您的需要进行融合。