我已经知道如何使用 diffopt
变量来开始水平/垂直拆分的 diff 模式,但不知道如何在已经打开两个文件进行比较时在两者之间切换。
我尝试了在这篇旧帖子中找到的被接受的回答,但并没有成功。Ctrl+W命令对我无效。可能是因为我在Windows友好模式下运行gVim?
我已经知道如何使用 diffopt
变量来开始水平/垂直拆分的 diff 模式,但不知道如何在已经打开两个文件进行比较时在两者之间切换。
我尝试了在这篇旧帖子中找到的被接受的回答,但并没有成功。Ctrl+W命令对我无效。可能是因为我在Windows友好模式下运行gVim?
:h window-moving
:h ctrl-w_J
:h ctrl-w_K
:h ctrl-w_H
:h ctrl-w_L
:vert
吗?例如::vert diffsplit foo.c
。也许尝试使用 :set diffopt+=vertical
。如果你正在使用 Fugitive,则它将根据 'diffopt'
的值和/或屏幕大小来决定是进行水平还是垂直的差异比较分割。 - Peter RinckerShift + j
以获取大写字母 J
。因此,命令是 ctrl+w
然后是 shift+j
。 - Pushpak Dagade我可能有点晚了,但也许这是一个有趣的解决方案。@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>
很不幸,它目前仍然改变窗口的大小,而不保留其形状。我正在努力解决这个问题,但要实现这一点并不容易,因为我必须知道“伙伴”窗口的形状。
你也可以使用 Ctrl+W
+ <箭头键>
来选择窗口。
ctrl+w
命令?你试过ctrl+w J
吗? - Peter Rinckerctrl+w J
将我的垂直分割改为了水平分割。现在我该如何将其改回来?如果您有完整的解决方案,请在下面发布答案!谢谢。 - drapkin11ctrl+w J
和ctrl+w H
,这很管用。如果你愿意,可以在下面发布这个答案,否则我就得把这个评论作为我的采纳答案再发一遍了!再次感谢。 - drapkin11diffopt
,这正是我正在寻找的! - Flimm