Vim'de dikey bölmeden yatay bölmeye hızlı geçiş yapmak için


Yanıtlar:


894

Vim posta listesi diyor (daha iyi okunabilirlik için yeniden biçimlendirildi):

Değiştirmek için iki horizonally bölünmeye dikey bölünmüş pencereler

Ctrl- w t Ctrl-w K

Yatay - dikey:

Ctrl- w t Ctrl-w H

açıklamalar:

Ctrl- w t ilk (üst sol) pencereyi güncel yapar

Ctrl- w K geçerli pencereyi en üstte tam genişliğe taşır

Ctrl- w H geçerli pencereyi en solda tam yüksekliğe taşır

T harfinin küçük, K ve H harflerinin büyük harf olduğuna dikkat edin.

Eğer verebilecek gibi Ayrıca sadece iki pencereli, öyle görünüyor Ctrl- w tEğer mevcut hale ne anlamı var, sadece iki pencerelerden birinde Zaten çünkü eğer parçasını?


27
Yatay olarak bölünmüş iki pencereniz varsa ve alt pencerede iseniz, sadece ^ WL kullanırsınız.
Çok fazla php

7
.... Güç ... Vim-fu'm bugün ikiye katlandı, teşekkürler. Bir sürü ilginç ^ w komutu var (b, w, vb.)
Alex Hart

Güzel olurdu bu NERDTree eklentisi kullanırken çalıştı :-)
Eno

3
@Eno Benim için iyi çalışıyor. Bölmeleri 'döndürmeden' önce NERDTree panelinizi kapalı konuma getirin, sonra tekrar açın. : NERDTreeToggle (Kolaylık sağlamak için bir işlev tuşu ile eşleştirildim).
Lambart

2
Vim konfigürasyonuma bazı lider eşlemeler ekledim: :nmap <leader>th <C-w>t<C-w>Hve:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski

324

Ctrl- wtakiben H, J, Kveya L(sermaye) kadar geçerli pencereyi hareket edecek left, bottom, topveya rightsırasıyla gibi normal imleç navigasyon.

Küçük harfler, pencereyi taşımak yerine odağı taşır.


5
kullanıcılar arabellekler arasında hareket etmek için hjkl kullandığından çok daha iyi.
Afshin Mehrabani

30
Kabul edilen cevap iyi bir cevap ama benim için bu cevabı hatırlamak daha kolay. Teşekkürler!
Jon Carter

Nerdtree ile de daha iyi çalışır.
arcseldon

Benim için macOS üzerinde ön ek yaparak çalışır Ctrl- w( Örneğinizde ^araç Ctrlolup olmadığını bilmiyorum ).
Giovanni Benussi

@GiovanniBenussi evet, bence ^demek Ctrl.
ma11hew28

47

Eğer varsa iki veya daha fazla pencere yatay veya dikey açıp onları geçmek istediğiniz tüm diğer oryantasyon için aşağıdaki kullanabilirsiniz:

(yataya geç)

:windo wincmd K

(dikeye geç)

:windo wincmd H

Her pencereye tek tek etkili bir şekilde gidiyor ve ^WKveya kullanıyor ^WH.


32

Aşağıdaki ex komutları herhangi bir sayıda pencereyi (yeniden) böler:

  • Dikey olarak bölmek için (örn. Pencereler arasında dikey bölücüler yapmak), :vertical ball
  • Yatay olarak bölmek için şunu yazın :ball

Gizli arabellekler varsa, bu komutların verilmesi gizli arabellekleri de görünür hale getirir.


Geçerli kabul edilen cevap sadece iki dosya için çalışacağından, bu kabul edilen cevap olmalıdır. Bu cevap daha eksiksiz.
DrStrangepork

:vert[ical] balldoc de çok :vert balliyi ve daha kısa.
Titou

:ball3 dikey pencereyi 2 yatay pencereye azaltırken, :vert ball 3 yatay pencereyi 3 dikey pencereye doğru şekilde eşler.
Titou

27

VIM'de, yapabilecekleriniz için farklı alternatifler görmek üzere aşağıdakilere göz atın:

: açılış penceresi

Örneğin:

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


11

Yatay - dikey bölme

CtrlWpencere komutu için + ve ardından Shift+ Hveya Shift+L


Dikey - yatay bölme

CtrlWpencere komutu için + ve ardından Shift+ Kveya Shift+J

Her iki çözüm de yalnızca iki pencere olduğunda geçerlidir.


Yardımı varsayılan olarak dikey bir bölmede aç

Bu satırların her ikisini de ekleyin .vimrc:

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}her zaman cmddikey olarak bölünmüş bir pencerede yürütür .


6

Steve yanıtından esinlenerek, geçerli sekmedeki tüm pencereler için dikey ve yatay bölünmeler arasında geçiş yapan basit bir işlev yazdım. Aşağıdaki son satırdaki gibi eşlemeye bağlayabilirsiniz.

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>

Öyle gibi aynı bölünmüş kalmak için zorlarsan daha iyi benim için çalışıyor if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif ve if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endifUmut mantıklı söyledi.
mjhoffmann

5

Mark Rushakoff'un yukarıdaki ipucunu takiben, haritam :

" 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

Düzenleme: kullanın Ctrl- w riyi sırada değilse iki pencere takas etmek için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.