Как переключаться между вертикальным и горизонтальным разделением в vimdiff?

Я уже знаю как использовать diffopt переменная для запуска режима diff с горизонтальными / вертикальными разделениями, но не как переключаться между ними, когда у меня уже есть 2 файла, открытые для сравнения.

я попробовал решение "принятый ответ", найденное в этот старый пост, но безрезультатно. Команды Ctrl+W не работали для меня. Возможно, потому, что я запускаю gVim в удобном для Windows режиме?

3 ответов


следующая команда изменит вертикальное разделение на горизонтальное разделение:

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

вы также можете сделать ctrl-w + <arrow key> для выбора окна.


Я сильно опаздываю, но, возможно, это интересное решение. Решение @PeterRincker работает только в том случае, если у вас открыто всего несколько окон без внутренних окон.
Я нашел эту (полезную) функцию в моей конфигурации времени выполнения, которой я хотел бы поделиться с u. Он предназначен для сопоставления как привязка клавиш и позволяет пользователю переключать текущее разделение на указанное. Отметьте, что он не переключается между вертикальным и горизонтальным, но пользователь говорит, какой ему нравится (может быть в настоящее время активным если этот сценарий не имеет смысла.) The 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>

к сожалению, в настоящее время он все еще меняет размер окна и не оставляет форму такой, как она есть. Я работаю над этим, но это не так легко достичь, потому что я должен знать форму окно "партнер".