如何在2个windows emacs中交换缓冲区
我正在使用emacs,我发现有时我有两个文件被分成两个窗口 例如: 我使用C-x C-f file1.C RET打开了1个文件 我把这个框架分成两个窗口:C-X3 然后我打开另一个文件C-xc-f file2.C RET 所以我有两个文件: 窗口1(左)如何在2个windows emacs中交换缓冲区,emacs,Emacs,我正在使用emacs,我发现有时我有两个文件被分成两个窗口 例如: 我使用C-x C-f file1.C RET打开了1个文件 我把这个框架分成两个窗口:C-X3 然后我打开另一个文件C-xc-f file2.C RET 所以我有两个文件: 窗口1(左)file1.c 窗口2(右)file2.c 我想知道是否有任何组合键来交换文件?通常当我有两个窗口时,我喜欢在左边的窗口工作。我知道我可以很容易地做C-x操作,将光标移动到右侧窗口 但是,我只是想知道是否可以交换文件,以便file2.c位于左侧窗
file1.c
窗口2(右)file2.c
我想知道是否有任何组合键来交换文件?通常当我有两个窗口时,我喜欢在左边的窗口工作。我知道我可以很容易地做C-x操作,将光标移动到右侧窗口
但是,我只是想知道是否可以交换文件,以便
file2.c
位于左侧窗口,而file1.c
位于右侧窗口?我会设法在所需位置打开文件#2,即在点击c-x 3之后,在导航到第二个文件之前,使用c-x o移动光标。我不知道有任何内置函数执行此操作
然而,要想激发一些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我使用它。现在,如果您正在处理左侧的缓冲区,则调用“buf move right”将与右侧的缓冲区进行交换。我想这就是您想要的。该库提供了一组相当全面的函数,用于翻转或旋转框架中的窗口排列
M-xflop frame
RET实现了这个特定问题所需要的功能
以下图表来自图书馆的评论(及其EmacsWiki页面):
如果您正在使用,则只需使用C-cs
(prelude-swap-windows
)。从序曲文档中:
C-cs
运行命令crux swap windows
(可在prelude mode map
中找到),
它是中的crux transpose窗口的别名
下面的代码段可以执行切换缓冲区
(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"))
如果您有prelude,则可以将ace窗口与S-w
一起使用。从那里你可以做许多列在他们的清单上的事情
您也可以从调用ace窗口开始,然后决定切换
删除或交换等操作。默认情况下,绑定为:
x-删除窗口
m-交换(移动)窗口
c-垂直或水平公平分割窗口
垂直分割窗口
b-水平拆分窗口
n-选择上一个窗口
因此,在Emacs 26.1新闻文件中有以下条目:
+++
*** New command 'window-swap-states' swaps the states of two live
windows.
它似乎提供了与类似的功能,但也可以进行一些高度/宽度转换?我复制并粘贴了这段代码,但它似乎没有做任何事情。哦,对不起,它做了一些事情,它交换了Emacs窗口的顶部和底部。我希望它能交换相框。好的。你把我弄糊涂了。你提到了C-X3。这是为了创建2个emacs窗口,而不是2个emacs框架。您使用的是框架还是窗口?你们叫什么窗口,叫什么框架?还有,你们并没有提到顶部和底部。你有两个以上的缓冲区同时显示吗?我不是问这个问题的人,我只是一个闯入者。在我看到这个问题之前,我从未使用过C-x 3,但正如您所说,它会分割Emacs窗口,而不是创建一个新的框架。这个解决方案非常完美,并且注释非常清楚-请确保您阅读它们:)如果您只想交换窗口(独立于所选窗口),您可以使用以下(defun win swap()“使用buffer move.el交换窗口”(交互式)(if(null(windmove find other window'right))(buf move left)(buf move right)))
buffer move在两个窗口的布局中不起作用,但在win swap
中效果很好,谢谢!在buffer move源代码中,你会看到关于C-S-up
到buf move-up
等的所有重要映射的注释。flop frame
仅当窗口之间的拆分已完成时才起作用rtical,对于水平拆分,您需要翻转帧
。但是,旋转帧
的工作方式与预期不同;一个命令可以在两个窗口之间交换缓冲区,无论拆分方向如何:)prelude看起来像一口(并且它没有打包在任何地方-curl | sh
=wtf?),但crux看起来确实不错,而且一开始我自己做了很多事情。我知道什么是curl | sh
,我想说的是:它是邪恶的。这也有效(在emacs24中测试):这似乎类似于Bahbar应答对于Spacemacs用户,ace交换窗口
绑定到SPC w M
。此功能默认可用。简单有效
+++
*** New command 'window-swap-states' swaps the states of two live
windows.