Vimで垂直分割から水平分割にすばやく切り替えるには


回答:


894

Vimのメーリングリストには次のように書かれています(読みやすくするために再フォーマットされています)。

2つの垂直分割ウィンドウを水平分割に変更するには

Ctrl- w t Ctrl-w K

水平から垂直へ:

Ctrl- w t Ctrl-w H

説明:

Ctrl- w t 最初の(左上)ウィンドウを現在にします

Ctrl- w K 現在のウィンドウを最上部の全幅に移動します

Ctrl- w H 現在のウィンドウを左端のフルハイトに移動します

tは小文字で、KとHは大文字であることに注意してください。

また、ウィンドウが2つしかない場合は、Ctrl-のw t部分を削除できるようです。既に2つのウィンドウのいずれかにいる場合は、それを現在のウィンドウにする理由は何ですか。


27
したがって、2つのウィンドウが水平方向に分割されていて、下のウィンドウにいる場合は、^ WLを使用します。
phpが多すぎる

7
....パワー...今日はvim-fuが2倍になりました。ありがとうございます。興味深い^ wコマンドがたくさんあります(b、wなど)
Alex Hart

これはNERDTreeプラグインを使用するときに機能します:-)
Eno

3
@Enoは問題なく動作します。分割を「回転」する前にNERDTreeパネルを閉じてから、元に戻します。:NERDTreeToggle(便宜上、ファンクションキーにマッピングしています)。
ランバート2014年

2
vim構成にいくつかのリーダーマッピングを追加しました: :nmap <leader>th <C-w>t<C-w>Hおよび:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski

324

Ctrl- w続いてHJKまたはL(資本)遠くに現在のウィンドウを移動しleftbottomtopまたはrightそれぞれ通常のカーソル移動等。

同等の小文字は、ウィンドウを移動する代わりにフォーカスを移動します。


5
ユーザーがhjklを使用してバッファー間を移動するため、はるかに優れています。
Afshin Mehrabani 2014

30
受け入れられた答えは良いものですが、私にとっては、この答えは覚えやすいです。ありがとう!
Jon Carter

オタクとの連携も良好です。
arcseldon 2017年

接頭辞を付けることで、macOSで動作しますCtrl- w(例でが^意味かどうかわかりませんCtrl)。
Giovanni Benussi

@GiovanniBenussiはい、そうだと思い^ますCtrl
ma11hew28 2018

47

水平方向または垂直方向に2 つ以上のウィンドウを開いており、それらすべてを他の方向に切り替えたい場合は、以下を使用できます。

(水平に切り替え)

:windo wincmd K

(垂直に切り替え)

:windo wincmd H

効果的に各ウィンドウに個別に移動し、^WKまたはを使用し^WHます。


32

次のexコマンドは、任意の数のウィンドウを(再)分割します。

  • 垂直方向に分割するには(たとえば、ウィンドウ間に垂直方向の分割線を作成)、次のように入力します。 :vertical ball
  • 水平に分割するには、次のように入力します :ball

非表示のバッファがある場合、これらのコマンドを発行すると、非表示のバッファも表示されます。


現在受け入れられている回答は2つのファイルに対してのみ機能するため、これが受け入れられた回答である必要があります。この答えはより完全です。
DrStrangepork 2015

:vert[ical] ballドキュメント:vert ballでもそうですが、これも問題ありません。
Titou

:ballは、3つの垂直ウィンドウを2つの水平ウィンドウに縮小し、3 :vert ball つの水平ウィンドウを3つの垂直ウィンドウに正しくマップします。
Titou

27

VIMで次のことを確認して、実行した可能性のある代替策を確認してください。

:helpオープニングウィンドウ

例えば:

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


11

水平から垂直への分割

Ctrl+ Wウィンドウコマンドの後にShift+ HまたはShift+L


垂直から水平への分割

Ctrl+ Wウィンドウコマンドの後にShift+ KまたはShift+J

両方のソリューションは、ウィンドウが2つしかない場合に適用されます。


デフォルトで垂直分割でヘルプを開く

これらの行を両方とも追加し.vimrcます。

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}常にcmd垂直分割ウィンドウで実行します。


6

スティーブの回答に触発されて、私は現在のタブのすべてのウィンドウの垂直分割と水平分割を切り替える単純な関数を書きました。以下の最後の行のように、マッピングにバインドできます。

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 if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endif希望メイク感覚という。
mjhoffmann

5

上記の Mark Rushakoffのヒントに続いて、これが私のマッピングです:

" 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

編集:Ctrl - w rを使用して、2つのウィンドウが正しい順序になっていない場合にそれらを入れ替えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.