说以下是我的窗口的当前结构:如果B在最上面,那会更好。如何将B置于A之上,而不置于A之上的任何其他窗口之上? br />

评论

这篇文章解释了如何旋转窗口。这是关于将分割从垂直切换为水平的操作。

@ lcd047这些是本网站之外的问题。值得在这里写下一个小的答案,并包括链接(这些链接很有价值)吗?

@Bernhard我想这对meta是个好问题。

@Bernhard是的。确保写下完整的答案,而不仅仅是链接。

然后请说明您要做什么,以及为什么我指出的两个答案没有解决问题。

#1 楼

要交换拆分窗口的两个部分,只需执行:<C-w> <C-r>

评论


我可能是错的,但是您的解决方案会旋转窗口,因此如果拆分超过2个,结果将不是OP所寻找的。

–statox♦
16 Dec 30'在10:13

你是绝对正确的。 OP正在寻找s.th。比“交换拆分窗口的两个部分”更为复杂。

–modesto
17年1月1日在11:07

实际上,OP正在寻找交换两个拆分窗口的命令,但是您的解决方案会旋转所有当前拆分窗口。如:h CTRL-W_CTRL-R中所述:第二个窗口成为第一个窗口,第三个窗口成为第二个窗口,依此类推。因此,如果您有3个拆分,则光标位于最下面的一个并按 第三个窗口将位于其他两个窗口之上,这不是OP所要求的:我如何将B放在A之上,而不放在已经在A之上的任何其他窗口之上?

–statox♦
17年1月2日,11:12



#2 楼

CTRL-W x           exchange current window with window N
                   (default: next window)


index.txt第2.2节,“窗口命令”)

如果A是当前窗口,则下一个将是B,因此只需要<C-w> x

如果B是当前窗口(下面还有更多窗口),那么您首先必须转到A,然后进行交换:<C-w> k <C-w> x

#3 楼

交换窗口或交换缓冲区的另一种方法是在文件中标记位置(使用大写标记),然后在所选窗口中打开这些标记。例如,如果我有两个文件, file_A和file_B:


我将使用file_A转到窗口并标记它:mA
使用file_B转到窗口并标记它:mB
然后取file_A的标记进入该窗口:'A
,然后返回第一个窗口并在其中获取file_B的标记:'B

此方法的优点是,如果由于某种原因而拆分了您的窗格不止一次,并且没有明确的逻辑来交换它们,例如,如果您想在12点和7点交换窗格,您不仅可以旋转窗口,还可以轻松交换缓冲区。

评论


这是有用的,因为它可以与各种复杂的窗口排列配合使用

–亨利E
20年4月1日,9:47

#4 楼

为了交换window头寸,效果等同于交换这两个窗口显示的缓冲区。
例如如果窗口A具有缓冲区2,窗口B具有缓冲区8,则需要转到窗口A,选择缓冲区8,然后转到窗口B,选择缓冲区2。

这个想法启发了我编写脚本它-并且它已经在我自己的工具箱中

功能代码:

function! WinBufSwap()
  let thiswin = winnr()
  let thisbuf = bufnr("%")
  let lastwin = winnr("#")
  let lastbuf = winbufnr(lastwin)

  exec  lastwin . " wincmd w" ."|".
      \ "buffer ". thisbuf ."|".
      \ thiswin ." wincmd w" ."|".
      \ "buffer ". lastbuf
endfunction

command! Wswap :call WinBufSwap()
map <Leader>bs <C-c>:call WinBufSwap()<CR>



选择窗口A
选择窗口B

:call WinBufSwap()
这将交换两个预选窗口中的缓冲区,将光标保留在原始窗口中。

选择两个所需的窗口以提前交换是关键细节,因为这需要为Vim指定要使用的对象。

评论


精确地说,当您说“先选择窗口A,然后选择B”时,是指“先关注A,然后关注B,以标记最后看到的缓冲区和窗口的顺序,以正确交换?还是”选择”是什么意思,而不是“关注”?

– Padawin
19年4月16日在20:48

确实是这样:我将“选择”用作“关注”。

–彗星
19年4月17日,0:28

#5 楼

您可以使用以下功能在两个窗口之间交换缓冲区:

function! SwitchWindow(count) abort
    let l:current_buf = winbufnr(0)
    exe "buffer" . winbufnr(a:count)
    exe a:count . "wincmd w"
    exe "buffer" . l:current_buf
    wincmd p
endfunction
nnoremap <C-w>x :<C-u>call SwitchWindow(v:count1)<CR>
现在,在大多数情况下,交换缓冲区在技术上就像交换窗口一样。因为您没有手动跟踪窗口,所以要跟踪哪个窗口正在保存哪个缓冲区。因此,上面的功能将在大多数情况下为您提供帮助。

#6 楼

您可以使用vim-windowswap,使您能够使用<leader>ww选择要交换的vim中的两个窗格,然后再按一次以将其替换为您要替换为的平底锅