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>He: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, topo right, rispettivamente, come normale navigazione del cursore.
Gli equivalenti minuscoli spostano lo stato attivo anziché spostare la finestra.
Ctrl- w(non so se ^significa Ctrlnel 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:ballSe sono presenti buffer nascosti, l'emissione di questi comandi renderà visibili anche i buffer nascosti.
:vert[ical] ballnel documento quindi :vert ballè anche ok e più breve.
:ballriduce 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 cmdin 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 endifspero 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.