I already know如何使用diffopt
变量启动带有水平/垂直拆分的差异模式,但是当我已打开两个文件进行比较时,如何在两者之间切换。
我尝试了this older post中找到的接受答案,但无济于事。 Ctrl + W命令对我不起作用。也许是因为我在Windows友好模式下运行gVim?
答案 0 :(得分:74)
以下命令会将垂直拆分更改为水平拆分:
ctrl + w 然后 J
要更改回垂直分割,请使用:
ctrl + w H 或 ctrl + w L
有关移动窗口的更多信息:
:h window-moving
:h ctrl-w_J
:h ctrl-w_K
:h ctrl-w_H
:h ctrl-w_L
答案 1 :(得分:0)
您也可以ctrl-w
+ <arrow key>
选择窗口。
答案 2 :(得分:0)
我迟到了,但也许这是一个有趣的解决方案。 @PeterRincker的解决方案只有在没有内窗的情况下打开几个窗口时才有效 我在运行时配置中找到了这个(有用的)函数,我想与你分享。它意味着映射为键绑定,并让用户将当前分割切换到指定的分割。标记它不在垂直和水平之间切换,但是用户告诉他喜欢哪一个(当前也可能是活动的,如果这种情况没有意义的话。) Vim 窗口树总是有两个窗口作为“合作伙伴”。在调整窗口大小时,也可以观察到这种效果。我要说的是:触发该功能,如果适用于当前活动窗口及其“伙伴”窗口。
" Switch to a vertical or horizontal split between two windows.
" Switching to currently used split results into the equal split.
" This is between the current window and the one window which is focused, when close the active window.
" This function does not adjust the windows height after the switch, cause this can't work correctly.
"
" Arguments:
" horizontal - Boolean to differ between both layouts.
"
function! s:switch_window_split(horizontal) abort
let l:bufnr = bufnr('%') " Get current buffer number to restore it in the new window.
if a:horizontal | let l:vert = '' | else | let l:vert = 'vert ' | endif
" Close current window and open new split with the cached buffer number.
wincmd c
execute l:vert . 'sbuffer ' . l:bufnr
endfunction
" Switch split layout.
nnoremap <leader>wS :<C-u>call <SID>switch_window_split(v:true)<CR>
nnoremap <leader>wV :<C-u>call <SID>switch_window_split(v:false)<CR>
不幸的是,它目前仍然会改变窗口的大小,并且不会保持形状不变。我正在努力,但这并不容易,因为我必须知道“伙伴”窗口的形状。