Per passare dalla divisione verticale alla divisione orizzontale velocemente in Vim


Risposte:


894

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?


27
Quindi, se hai due finestre divise orizzontalmente e ti trovi nella finestra inferiore, basta usare ^ WL.
troppo php,

7
.... Il potere ... Il mio vim-fu è raddoppiato oggi, grazie. Ci sono un sacco di interessanti ^ w comandi (b, w, ecc.)
Alex Hart

Sarebbe bello se funzionasse usando il plugin NERDTree :-)
Eno

3
@Eno Funziona bene per me. Basta chiudere il pannello NERDTree prima di "ruotare" le divisioni, quindi riaccenderlo. : NERDTreeToggle (l'ho mappato su un tasto funzione per comodità).
Lambart,

2
Ho aggiunto alcune mappature dei leader alla mia configurazione di vim: :nmap <leader>th <C-w>t<C-w>He:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski l'

324

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.


5
è molto meglio poiché gli utenti usano hjkl per spostarsi tra i buffer.
Afshin Mehrabani,

30
La risposta accettata è buona, ma per me questa risposta è più facile da ricordare. Grazie!
Jon Carter,

Funziona meglio anche con nerdtree.
ArcSeldon,

Funziona per me su macOS con il prefisso Ctrl- w(non so se ^significa Ctrlnel tuo esempio).
Giovanni Benussi,

@GiovanniBenussi sì, penso che ^significhi Ctrl.
ma11hew28,

47

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.


32

I seguenti comandi ex divideranno (ri) qualsiasi numero di finestre:

  • Per dividere verticalmente (ad esempio, creare divisori verticali tra le finestre), digitare :vertical ball
  • Per dividere in orizzontale, digitare :ball

Se sono presenti buffer nascosti, l'emissione di questi comandi renderà visibili anche i buffer nascosti.


Questa dovrebbe essere la risposta accettata, poiché l'attuale risposta accettata funzionerà solo per due file. Questa risposta è più completa.
DrStrangepork,

:vert[ical] ballnel documento quindi :vert ballè anche ok e più breve.
Titou,

:ballriduce 3 finestre verticali a 2 finestre orizzontali, mentre :vert ball mappa correttamente 3 finestre orizzontali a 3 finestre verticali.
Titou,

27

In VIM, dai un'occhiata a quanto segue per vedere diverse alternative per quello che potresti aver fatto:

: aiuto apertura-finestra

Per esempio:

Ctrl- W s
Ctrl- W o
Ctrl- W v
Ctrl- W o
Ctrl- W s
...


11

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.


Apri la guida in una divisione verticale per impostazione predefinita

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.


6

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>

Funziona ancora meglio per me se lo costringo a rimanere nella stessa divisione in quel modo 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.
mjhoffmann,

5

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.