我正在使用emacs我发现有时候我将2个文件分成2个窗口。
例如: 我使用 C-x C-f file1.c打开1个文件RET
我将框架分成两个窗口: C-x 3
然后我打开另一个文件 C-x C-f file2.c RET
所以我有2个文件:
窗口1(左)file1.c
窗口2(右)file2.c
我想知道是否有任何组合交换文件?通常情况下,当我有2个窗口时,我喜欢在左侧窗口上工作。我知道我可以轻松地执行 C-x o 将光标移动到右侧窗口。
但是,我只是想知道我是否可以交换文件,以便file2.c
位于左侧窗口,file1.c
位于右侧窗口中?
答案 0 :(得分:77)
我使用buffer-move。现在,如果您正在处理左侧的缓冲区,则调用“buf-move-right”会将其与右侧的缓冲区进行交换。我想这就是你想要的。
答案 1 :(得分:28)
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 | | | |
+-------------------------+ +-----------------+-------+
答案 2 :(得分:14)
如果您使用的是Prelude,则可以使用C-c s
(prelude-swap-windows
)。来自Prelude文档:
C-c s
运行命令crux-swap-windows
(在prelude-mode-map
中找到), 这是crux.el中crux-transpose-windows
的别名。
答案 3 :(得分:12)
在Emacs 26.1 NEWS文件中,有以下条目:
+++
*** New command 'window-swap-states' swaps the states of two live
windows.
它似乎提供与crux-transpose-windows
类似的功能,但也可以进行一些高度/宽度换位?
答案 4 :(得分:11)
我不知道有任何内置功能。</ p>
但是,为了做到这一点,鞭挞一些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
答案 5 :(得分:1)
如果你有前奏,你可以使用ace {window S-w
。从那里,您可以执行docs中列出的许多内容。
您也可以先调用ace-window然后决定切换 删除或交换的操作等。默认情况下,绑定是:
x - 删除窗口
m - 交换(移动)窗口
c - 公平地分割窗口,垂直或水平
v - 垂直拆分窗口
b - 水平分割窗口
n - 选择上一个窗口
...
所以它会是S-w m
答案 6 :(得分: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"))
答案 7 :(得分:-1)
我会设法在所需的位置打开文件#2,即在你点击c-x 3之后,在导航到第二个文件之前用c-x o移动光标。