web-dev-qa-db-ja.com

vimdiffで垂直分割と水平分割を切り替えるにはどうすればよいですか?

すでに知っていますdiffopt変数を使用して、水平/垂直分割でdiffモードを開始する方法。

この古い投稿 にある受け入れられた回答を試しましたが、役に立ちませんでした。 Ctrl + Wコマンドが機能しませんでした。おそらく、WindowsフレンドリーモードでgVimを実行しているためでしょうか。

44
drapkin11

次のコマンドは、垂直分割を水平分割に変更します。

ctrl+w その後 J

垂直分割に戻すには、次のいずれかを使用します。

ctrl+wH または ctrl+wL

ウィンドウの移動の詳細については:

:h window-moving
:h ctrl-w_J
:h ctrl-w_K
:h ctrl-w_H
:h ctrl-w_L
79
Peter Rincker

遅いですが、これは興味深い解決策かもしれません。 @PeterRinckerによる解決策は、内部ウィンドウなしでいくつかのウィンドウを開いている場合にのみ機能します。
私は、uと共有したいランタイム構成にこの(便利な)関数を見つけました。これはキーバインドとしてマップされ、ユーザーが現在の分割を指定された分割に切り替えることができるようにするためのものです。垂直方向と水平方向を切り替えないことをマークしますが、ユーザーはどちらが好きかを示します(このシナリオが意味をなさない場合も、現在もアクティブにできます。)Vimウィンドウツリー「パートナー」として2つのウィンドウがあります。この影響は、ウィンドウのサイズを変更するときにも確認できます。私が言いたいこと:現在アクティブなウィンドウとその「パートナー」ウィンドウに適用される場合は、関数をトリガーします。

" Switch to a vertical or horizontal split between two windows.
" Switching to currently used split results into the equal split.
" This is between the current window and the one window which is focused, when close the active window.
" This function does not adjust the windows height after the switch, cause this can't work correctly.
" 
" Arguments:
"   horizontal - Boolean to differ between both layouts.
"
function! s:switch_window_split(horizontal) abort
  let l:bufnr = bufnr('%')  " Get current buffer number to restore it in the new window.
  if a:horizontal | let l:vert = '' | else | let l:vert = 'vert ' | endif

  " Close current window and open new split with the cached buffer number.
  wincmd c
  execute l:vert . 'sbuffer ' . l:bufnr
endfunction

" Switch split layout.
nnoremap <leader>wS :<C-u>call <SID>switch_window_split(v:true)<CR>
nnoremap <leader>wV :<C-u>call <SID>switch_window_split(v:false)<CR>

残念ながら、現在でもウィンドウのサイズが変更されており、形状をそのままにしないでください。私はそれに取り組んでいますが、達成するのは簡単ではありません。「パートナー」ウィンドウの形状を知っている必要があるためです。

0
weilbith

ctrl-w + <arrow key>ウィンドウを選択します。

0
electr0ninja