Как переключаться между вертикальным и горизонтальным расколами в vimdiff?
Я уже знаю, как использовать переменную diffopt
для запуска режима сравнения с горизонтальным/вертикальным разделением, но не знаю, как переключаться между ними, когда у меня уже есть два файла, открытых для сравнения.
Я попробовал принятый ответ, найденный в этом старом посте, но безрезультатно. Команды Ctrl + W не работают для меня. Возможно, потому что я запускаю gVim в дружественном к Windows режиме?
Ответы
Ответ 1
Следующая команда изменит вертикальное разделение на горизонтальный раскол:
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
Ответ 2
Вы также можете сделать ctrl-w
+ <arrow key>
, чтобы выбрать окно.
Ответ 3
Я опаздываю, но, возможно, это интересное решение. Решение @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>
К сожалению, в настоящее время он по-прежнему меняет размер окна и не оставляет форму такой, какая она есть. Я работаю над этим, но это не так легко достичь, потому что я должен знать форму окна "партнера".