如何交换缓冲区的两个窗口的emacs

问题描述 投票:84回答:8

我使用emacs我发现,有时候我有2个文件分成2个窗口。

例如:我使用C-X C-F file1.c中RET打开1个文件

我拆分帧分为两个窗口:C-×3

然后我打开另一个文件C-X C-F file2.c中RET

所以,我有2个文件:

窗口1(左)file1.c

窗口2(右)file2.c

我想知道是否有任何的组合键在交换文件?通常我喜欢在左边的窗口上工作时,我有2个窗口。我知道我可以很容易做到C-X OTO将光标移动到右侧窗口中。

不过,我只是想知道我是否可以交换文件,使file2.c在左侧窗口中file1.c是在右边的窗口?

emacs
8个回答
81
投票

我用buffer-move这一点。现在,如果您正在使用左侧的缓冲,称“BUF-MOVE右”将右边的一个交换吧。我想这是你想要的。


30
投票

transpose-frame库提供了一个非常全面的功能集为翻转或旋转框架窗口的安排。

M-X flop-frame RET做什么这个特定问题的需要。

下图是从库(及其EmacsWiki页)的评论:

‘transpose-frame’ … Swap x-direction and y-direction

       +------------+------------+      +----------------+--------+
       |            |     B      |      |        A       |        |
       |     A      +------------+      |                |        |
       |            |     C      |  =>  +--------+-------+   D    |
       +------------+------------+      |   B    |   C   |        |
       |            D            |      |        |       |        |
       +-------------------------+      +--------+-------+--------+

‘flip-frame’ … Flip vertically

       +------------+------------+      +------------+------------+
       |            |     B      |      |            D            |
       |     A      +------------+      +------------+------------+
       |            |     C      |  =>  |            |     C      |
       +------------+------------+      |     A      +------------+
       |            D            |      |            |     B      |
       +-------------------------+      +------------+------------+

‘flop-frame’ … Flop horizontally

       +------------+------------+      +------------+------------+
       |            |     B      |      |     B      |            |
       |     A      +------------+      +------------+     A      |
       |            |     C      |  =>  |     C      |            |
       +------------+------------+      +------------+------------+
       |            D            |      |            D            |
       +-------------------------+      +-------------------------+

‘rotate-frame’ … Rotate 180 degrees

       +------------+------------+      +-------------------------+
       |            |     B      |      |            D            |
       |     A      +------------+      +------------+------------+
       |            |     C      |  =>  |     C      |            |
       +------------+------------+      +------------+     A      |
       |            D            |      |     B      |            |
       +-------------------------+      +------------+------------+

‘rotate-frame-clockwise’ … Rotate 90 degrees clockwise

       +------------+------------+      +-------+-----------------+
       |            |     B      |      |       |        A        |
       |     A      +------------+      |       |                 |
       |            |     C      |  =>  |   D   +--------+--------+
       +------------+------------+      |       |   B    |   C    |
       |            D            |      |       |        |        |
       +-------------------------+      +-------+--------+--------+

‘rotate-frame-anti-clockwise’ … Rotate 90 degrees anti-clockwise

       +------------+------------+      +--------+--------+-------+
       |            |     B      |      |   B    |   C    |       |
       |     A      +------------+      |        |        |       |
       |            |     C      |  =>  +--------+--------+   D   |
       +------------+------------+      |        A        |       |
       |            D            |      |                 |       |
       +-------------------------+      +-----------------+-------+

18
投票

在Emacs的26.1 NEWS文件有以下条目:

+++
*** New command 'window-swap-states' swaps the states of two live
windows.

这似乎提供了类似的功能,但crux-transpose-windows也可以做一些高度/宽度换位?


14
投票

如果你正在使用Prelude你可以使用C-c sprelude-swap-windows)。从前奏文档:

C-c s运行命令crux-swap-windows(在prelude-mode-map找到),其是用于在crux-transpose-windows crux.el的别名。


11
投票

我不知道任何内置的功能,这样做的。

然而,这似乎并不太难掀起一些elisp的做这件事。魔鬼在细节,但。

(defun swap-buffers-in-windows ()
  "Put the buffer from the selected window in next window, and vice versa"
  (interactive)
  (let* ((this (selected-window))
     (other (next-window))
     (this-buffer (window-buffer this))
     (other-buffer (window-buffer other)))
    (set-window-buffer other this-buffer)
    (set-window-buffer this other-buffer)
    )
  )

值得注意的是,这可能不是做什么,你就在那里插入符结束的愿望。但是,你首先得说你想要什么:P


1
投票

如果你有前奏,你可以使用ACE-窗口S-w。从那里,你可以做自己的docs上市的很多事情。

您也可以通过调用王牌窗口开始,然后决定切换动作,删除或交换等默认情况下,绑定是:

X - 删除窗口

米 - 交换(移动)窗口

Ç - 分割窗口相当,水平或垂直

N - 分割窗口垂直

b - 分割窗口水平

N - 选择一个窗口

...

因此,这将是S-w m


0
投票

下面的代码片段可以做开关缓冲区。

(defun ab/switch-buffer-each-other (arg)
  "switch current buffer with other window buffer 
   right-2-left and up-2-down"
  (interactive "p")
  (cond
   ((windmove-find-other-window 'right) (buf-move-right))
   ((windmove-find-other-window 'left) (buf-move-left))
   ((windmove-find-other-window 'up) (buf-move-up))
   ((windmove-find-other-window 'down) (buf-move-down)))
(message "switch buffer done"))

-1
投票

我将图谋在所需的位置,以打开文件#2,即你打C-X 3后,将光标移动与c-×○导航到第二个文件之前。

© www.soinside.com 2019 - 2024. All rights reserved.