変数を使用して水平/垂直分割で差分モードを開始する方法はすでに知っていdiffopt
ますが、比較のために2つのファイルを既に開いている場合は、2つを切り替える方法はわかりません。
私はこの古い投稿で見つかった受け入れられた答えを試しましたが、役に立ちませんでした。Ctrl+Wコマンドが機能しませんでした。おそらく、Windows対応モードでgVimを実行しているためですか?
次のコマンドは、垂直分割を水平分割に変更します。
ctrl+wその後J
垂直分割に戻すには、次のいずれかを使用します。
ctrl+w Hまたはctrl+w L
ウィンドウの移動の詳細については、以下をご覧ください。
:h window-moving
:h ctrl-w_J
:h ctrl-w_K
:h ctrl-w_H
:h ctrl-w_L
私は遅刻しましたが、おそらくこれは興味深い解決策です。@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>
残念ながら、現在もウィンドウのサイズが変更されており、形状をそのままにしないでください。私はそれに取り組んでいますが、達成するのはそれほど簡単ではありません。「パートナー」ウィンドウの形状を知らなければならないからです。
ctrl-w
+<arrow key>
を実行してウィンドウを選択することもできます。