Как вы можете переключить ваши текущие окна с горизонтального разделения на вертикальное и наоборот в Vim?
Я сделал это минуту назад случайно, но больше не могу найти ключ.
Как вы можете переключить ваши текущие окна с горизонтального разделения на вертикальное и наоборот в Vim?
Я сделал это минуту назад случайно, но больше не могу найти ключ.
Ответы:
Список рассылки Vim говорит (переформатирован для лучшей читаемости):
Чтобы изменить два вертикально разделенных окна на горизонтальное разделение
Ctrl- w t Ctrl-w K
По горизонтали к вертикали:
Ctrl- w t Ctrl-w H
Пояснения:
Ctrl- w t делает первое (topleft) окно текущим
Ctrl- w K перемещает текущее окно на полную ширину в самом верху
Ctrl- w H перемещает текущее окно на полную высоту слева
Обратите внимание, что t строчные, а K и H прописные.
Кроме того , только два окна, кажется , что вы можете уронить Ctrl- w tотчасти потому , что , если вы уже в одном из только два окна, в чем смысл сделать его текущим?
:nmap <leader>th <C-w>t<C-w>H
и:nmap <leader>tk <C-w>t<C-w>K
Ctrl- а wзатем H, J, Kили L(капитала) будет переместить текущее окно в далекую left
, bottom
, top
или , right
соответственно , как нормальный курсор навигации.
Эквиваленты в нижнем регистре перемещают фокус вместо перемещения окна.
Ctrl
- w
(я не знаю, ^
означает ли это Ctrl
в вашем примере).
^
значит Ctrl
.
Если у вас есть два или более окон, открытых горизонтально или вертикально, и вы хотите переключить их все в другую ориентацию, вы можете использовать следующее:
(переключиться в горизонтальное положение)
:windo wincmd K
(переключиться в вертикальное положение)
:windo wincmd H
Он эффективно подходит к каждому окну индивидуально и использует ^WKили ^WH.
Следующие команды ex будут (повторно) разбивать любое количество окон:
:vertical ball
:ball
Если есть скрытые буферы, выполнение этих команд также сделает скрытые буферы видимыми.
:vert[ical] ball
в док :vert ball
тоже так ок и короче.
:ball
уменьшает 3 вертикальных окна до 2 горизонтальных, в то время как :vert ball
правильно отображает 3 горизонтальных окна на 3 вертикальных.
Горизонтальное разделение на вертикальное
Ctrl+ Wдля команды окна, сопровождаемый Shift+ Hили Shift+L
Вертикальное разделение на горизонтальное
Ctrl+ Wдля команды окна, сопровождаемый Shift+ Kили Shift+J
Оба решения применяются, когда существуют только два окна.
Добавьте обе эти строки в .vimrc
:
cabbrev help vert help
cabbrev h vert h
:vert[ical] {cmd}
всегда выполняет cmd
в вертикально разделенном окне.
Вдохновленный ответом Стива, я написал простую функцию, которая переключается между вертикальным и горизонтальным разделением для всех окон в текущей вкладке. Вы можете привязать его к отображению, как в последней строке ниже.
function! ToggleWindowHorizontalVerticalSplit()
if !exists('t:splitType')
let t:splitType = 'vertical'
endif
if t:splitType == 'vertical' " is vertical switch to horizontal
windo wincmd K
let t:splitType = 'horizontal'
else " is horizontal switch to vertical
windo wincmd H
let t:splitType = 'vertical'
endif
endfunction
nnoremap <silent> <leader>wt :call ToggleWindowHorizontalVerticalSplit()<cr>
if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif
и if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endif
надеюсь, что имеет смысл.
Следуя совету Марка Рушакова выше , вот мое отображение:
" vertical to horizontal ( | -> -- )
noremap <c-w>- <c-w>t<c-w>K
" horizontal to vertical ( -- -> | )
noremap <c-w>\| <c-w>t<c-w>H
noremap <c-w>\ <c-w>t<c-w>H
noremap <c-w>/ <c-w>t<c-w>H
Изменить: использовать Ctrl- w rчтобы поменять местами два окна, если они не в порядке.