Aby szybko przełączyć się z podziału pionowego na poziomy w Vimie


Odpowiedzi:


893

Lista mailingowa Vima mówi (ponownie sformatowana dla lepszej czytelności):

Aby zmienić dwa okna podzielone pionowo, aby podzielić poziomo

Ctrl- w t Ctrl-w K

Poziomo do pionowo:

Ctrl- w t Ctrl-w H

Objaśnienia:

Ctrl- w t aktywuje pierwsze (lewe) okno

Ctrl- w K przesuwa bieżące okno na pełną szerokość na samej górze

Ctrl- w H przesuwa bieżące okno do pełnej wysokości po lewej stronie

Zauważ, że t jest małymi literami, a K i H są dużymi literami.

Ponadto, mając tylko dwa okna, wydaje się, że możesz upuścić część Ctrl-, w tponieważ jeśli już jesteś w jednym z dwóch okien, jaki jest sens, aby był aktualny?


27
Więc jeśli masz dwa okna podzielone poziomo i jesteś w dolnym oknie, po prostu użyj ^ WL.
za dużo php

7
.... Moc ... Mój vim-fu podwoił się dzisiaj, dziękuję. Istnieje mnóstwo interesujących poleceń ^ b (b, w itp.)
Alex Hart

Byłoby miło, czy to zadziałało podczas korzystania z wtyczki NERDTree :-)
Eno

3
@Eno działa dobrze dla mnie. Wystarczy zamknąć panel NERDTree przed „obróceniem” podziałów, a następnie ponownie go otworzyć. : NERDTreeToggle (Dla wygody mam przypisany do klawisza funkcyjnego).
Lambart

2
Dodałem kilka mapowań liderów do mojej konfiguracji vima: :nmap <leader>th <C-w>t<C-w>Hi:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski

324

Ctrl- wnastępnie H, J, Klub L(kapitał) przeniesie bieżące okno do daleko left, bottom, toplub right, odpowiednio, jak normalnej nawigacji kursora.

Odpowiedniki małych liter przesuwają fokus zamiast przesuwać okno.


5
jest o wiele lepszy, ponieważ użytkownicy używają hjkl do przechodzenia między buforami.
Afshin Mehrabani

30
Przyjęta odpowiedź jest dobra, ale dla mnie ta odpowiedź jest łatwiejsza do zapamiętania. Dzięki!
Jon Carter

Działa lepiej również z nerdtree.
arcseldon

Działa dla mnie w systemie macOS z prefiksem Ctrl- w(nie wiem, czy w twoim przykładzie ^znaczy to Ctrl).
Giovanni Benussi,

@ GiovanniBenussi tak, myślę, że ^znaczy Ctrl.
ma11hew28,

47

Jeśli masz dwa lub więcej okien otwartych w poziomie lub w pionie i chcesz je wszystkie przełączyć na inną orientację, możesz użyć następujących opcji:

(przełącz na poziomy)

:windo wincmd K

(przełącz na pionowy)

:windo wincmd H

Efektywnie przechodzi do każdego okna indywidualnie i używa ^WKlub ^WH.


31

Następujące polecenia ex podzielą (ponownie) dowolną liczbę okien:

  • Aby podzielić w pionie (np. Zrobić pionowe dzielniki między oknami), wpisz :vertical ball
  • Aby podzielić poziomo, wpisz :ball

Jeśli istnieją ukryte bufory, wydanie tych poleceń sprawi, że ukryte bufory będą widoczne.


To powinna być zaakceptowana odpowiedź, ponieważ bieżąca zaakceptowana odpowiedź będzie działać tylko dla dwóch plików. Ta odpowiedź jest bardziej kompletna.
DrStrangepork,

:vert[ical] ballw dokumencie :vert balljest więc w porządku i krótszy.
Titou

:ballredukuje 3 okna pionowe do 2 okien poziomych, a jednocześnie :vert ball poprawnie mapuje 3 okna poziome do 3 okien pionowych.
Titou

27

W VIM zapoznaj się z poniższymi informacjami, aby zobaczyć różne alternatywy dla tego, co mogłeś zrobić:

: pomoc w otwarciu okna

Na przykład:

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


11

Podział poziomy na pionowy

Ctrl+ Wdla polecenia okna, a następnie Shift+ Hlub Shift+L


Podział pionowy na poziomy

Ctrl+ Wdla polecenia okna, a następnie Shift+ Klub Shift+J

Oba rozwiązania mają zastosowanie, gdy istnieją tylko dwa okna.


Domyślnie otwórz pomoc w podziale pionowym

Dodaj obie te linie do .vimrc:

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}zawsze wykonuje cmdokno podzielone pionowo.


6

Zainspirowany odpowiedzią Steve'a, napisałem prostą funkcję, która przełącza pomiędzy podziałem pionowym i poziomym dla wszystkich okien w bieżącej zakładce. Możesz powiązać go z mapowaniem jak w ostatnim wierszu poniżej.

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>

Działa jeszcze lepiej dla mnie, jeśli zmuszę go do pozostania w takim samym podziale, jak to ma miejsce, if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif i if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endifMam nadzieję, że to ma sens.
mjhoffmann

5

Podążając za wskazówką Marka Rushakoffa powyżej , oto moje mapowanie:

" 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

Edycja: użyj Ctrl- w raby zamienić dwa okna, jeśli nie są w dobrym stanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.