Come puoi cambiare la tua attuale finestra dalla divisione orizzontale alla divisione verticale e viceversa in Vim?
L'ho fatto un attimo fa per caso, ma non riesco a trovare di nuovo la chiave.
Come puoi cambiare la tua attuale finestra dalla divisione orizzontale alla divisione verticale e viceversa in Vim?
L'ho fatto un attimo fa per caso, ma non riesco a trovare di nuovo la chiave.
Risposte:
La mailing list di Vim dice (riformattata per una migliore leggibilità):
Per cambiare due finestre divise verticalmente in divise orizzontalmente
Ctrl- w t Ctrl-w K
Da orizzontale a verticale:
Ctrl- w t Ctrl-w H
spiegazioni:
Ctrl- w t Rende corrente la prima finestra (di inizio)
Ctrl- w K sposta la finestra corrente a larghezza intera in alto
Ctrl- w H sposta la finestra corrente a tutta altezza all'estrema sinistra
Notare che t è in minuscolo e K e H in maiuscolo.
Inoltre, con solo due finestre, sembra che tu possa rilasciare la parte Ctrl- w tperché se sei già in una delle sole due finestre, che senso ha renderlo attuale?
:nmap <leader>th <C-w>t<C-w>H
e:nmap <leader>tk <C-w>t<C-w>K
Ctrl- wseguito da H, J, Ko L(capitale) si sposta la finestra corrente al lontano left
, bottom
, top
o right
, rispettivamente, come normale navigazione del cursore.
Gli equivalenti minuscoli spostano lo stato attivo anziché spostare la finestra.
Ctrl
- w
(non so se ^
significa Ctrl
nel tuo esempio).
^
significhi Ctrl
.
Quando hai due o più finestre aperte orizzontalmente o verticalmente e desideri spostarle tutte sull'altro orientamento, puoi utilizzare quanto segue:
(passa in orizzontale)
:windo wincmd K
(passa alla verticale)
:windo wincmd H
Va effettivamente in ogni finestra individualmente e usando ^WKo ^WH.
I seguenti comandi ex divideranno (ri) qualsiasi numero di finestre:
:vertical ball
:ball
Se sono presenti buffer nascosti, l'emissione di questi comandi renderà visibili anche i buffer nascosti.
:vert[ical] ball
nel documento quindi :vert ball
è anche ok e più breve.
:ball
riduce 3 finestre verticali a 2 finestre orizzontali, mentre :vert ball
mappa correttamente 3 finestre orizzontali a 3 finestre verticali.
Dividi da orizzontale a verticale
Ctrl+ Wper il comando della finestra, seguito da Shift+ Ho Shift+L
Dividi da verticale ad orizzontale
Ctrl+ Wper il comando della finestra, seguito da Shift+ Ko Shift+J
Entrambe le soluzioni si applicano quando esistono solo due finestre.
Aggiungi entrambe queste righe a .vimrc
:
cabbrev help vert help
cabbrev h vert h
:vert[ical] {cmd}
esegue sempre il cmd
in una finestra divisa verticalmente.
Ispirato dalla risposta di Steve, ho scritto una semplice funzione che alterna le divisioni verticali e orizzontali per tutte le finestre nella scheda corrente. Puoi associarlo alla mappatura come nell'ultima riga in basso.
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
e if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endif
spero che abbia senso.
Seguendo il suggerimento di Mark Rushakoff sopra , ecco la mia mappatura:
" 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
Modifica: usa Ctrl- w rper scambiare due finestre se non sono nel buon ordine.