VIMを使用しているときは、常に複数のウィンドウが表示されています。時々私は簡単な方法で、それらのウィンドウを場所で入れ替えたいと思います。これをより簡単にするためのプラグイン、マクロなどはありますか?ところで、私はMiniBufExplorerを使用しています。
VIMを使用しているときは、常に複数のウィンドウが表示されています。時々私は簡単な方法で、それらのウィンドウを場所で入れ替えたいと思います。これをより簡単にするためのプラグイン、マクロなどはありますか?ところで、私はMiniBufExplorerを使用しています。
回答:
いくつかの便利なコマンドが組み込まれており、ある程度の制御が可能ですが、包括的ではありません。主なものは次のとおりです。
Ctrl- W、r(つまりCTRL、押したままW、離したCTRL、押したr)-ウィンドウを回転させます(最初のウィンドウが2番目のウィンドウになり、2番目のウィンドウが3番目のウィンドウになる、など)。
Ctrl- W、x-現在のウィンドウを次のウィンドウと交換する
Ctrl- W、Shift-- Hこのウィンドウを左端に移動します
Ctrl- W、Shift-- Kこのウィンドウを一番上に移動
(同様にCtrl- W、Shift- JおよびCtrl- W、Shift- も同様L)。見る:
:help window-moving
詳細については。
私はVimウィンドウをコピーして貼り付けるために、次のコードスニペットをvimrcで作成して使用しています。
これにより、たとえば次のショートカットが定義されます。
<c-w>y
:「ウィンドウをヤンクする」、つまり、現在のウィンドウ内のバッファの数をグローバル変数に格納します。<c-w>pp
:「ウィンドウを現在のウィンドウの代わりに配置する」、つまり、以前に保存されたバッファ番号を読み取り、そのバッファを現在のウィンドウで開きます。また、現在のウィンドウにあったバッファの数も格納します。「これらのウィンドウを所定の場所でスワップする」というのは、「ウィンドウAのバッファーをウィンドウBで、またはその逆で、ウィンドウの位置を変更せずに開く」という意味の場合、次のキーボードシーケンスを使用してウィンドウをスワップできます。
<c-w>y
(バッファ番号をヤンクする)<c-w>pp
(バッファを貼り付ける)<c-w>pp
(バッファを再度貼り付ける)Vim 7.0以降でのみ機能します。
if version >= 700
function! HOpen(dir,what_to_open)
let [type,name] = a:what_to_open
if a:dir=='left' || a:dir=='right'
vsplit
elseif a:dir=='up' || a:dir=='down'
split
end
if a:dir=='down' || a:dir=='right'
exec "normal! \<c-w>\<c-w>"
end
if type=='buffer'
exec 'buffer '.name
else
exec 'edit '.name
end
endfunction
function! HYankWindow()
let g:window = winnr()
let g:buffer = bufnr('%')
let g:bufhidden = &bufhidden
endfunction
function! HDeleteWindow()
call HYankWindow()
set bufhidden=hide
close
endfunction
function! HPasteWindow(direction)
let old_buffer = bufnr('%')
call HOpen(a:direction,['buffer',g:buffer])
let g:buffer = old_buffer
let &bufhidden = g:bufhidden
endfunction
noremap <c-w>d :call HDeleteWindow()<cr>
noremap <c-w>y :call HYankWindow()<cr>
noremap <c-w>p<up> :call HPasteWindow('up')<cr>
noremap <c-w>p<down> :call HPasteWindow('down')<cr>
noremap <c-w>p<left> :call HPasteWindow('left')<cr>
noremap <c-w>p<right> :call HPasteWindow('right')<cr>
noremap <c-w>pk :call HPasteWindow('up')<cr>
noremap <c-w>pj :call HPasteWindow('down')<cr>
noremap <c-w>ph :call HPasteWindow('left')<cr>
noremap <c-w>pl :call HPasteWindow('right')<cr>
noremap <c-w>pp :call HPasteWindow('here')<cr>
noremap <c-w>P :call HPasteWindow('here')<cr>
endif
私は同じ時期に同じような質問をしました。私は、任意に複雑なレイアウトを変更することなく、具体的にウィンドウを交換する方法を望んでいました。提案されたソリューションの1つからvimプラグインを作成することになりました。これはWindowSwap.vimと呼ばれます。お好みのvimプラグインマネージャーを使用してインストールし、試してみてください。
WindowSwap.vimを使用すると、簡単に
<Leader>yw
ウィンドウをヤンクします。 <Leader>pw
そのウィンドウを貼り付けるには、最初のウィンドウの位置と入れ替えます。キーの組み合わせはもちろん、好みに合わせて設定できます。
<c-w>r
または<c-w>x
垂直方向と水平方向のウィンドウの分割が混在しているときに回転または交換ウィンドウができないという制限があります。また<c-w>H
、特に多くのウィンドウがある場合は、ウィンドウレイアウトが予想外に変更される可能性があります。
したがって、ウィンドウ/バッファ切り替えの特定のニーズを満たすために、いくつかの作業を行うことができます。現在のウィンドウを左上のウィンドウに切り替える例を示します(通常、垂直方向に最大化します):
function! SwitchMainWindow()
let l:current_buf = winbufnr(0)
exe "buffer" . winbufnr(1)
1wincmd w
exe "buffer" . l:current_buf
endfunction
nnoremap <c-w><c-e> :call SwitchMainWindow()<cr>
私の意見では、http://vimcasts.org/episodes/working-with-windows/がこの質問に対する完全な回答です。簡単に言えば:
ctrl-w w
開いているウィンドウを切り替えるctrl-w h
ウィンドウを左にフォーカスするctrl-w j
ウィンドウを下にフォーカスctrl-w k
ウィンドウを上にフォーカスctrl-w l
ウィンドウを右にフォーカスctrl-w r
すべてのウィンドウを回転させるctrl-w x
現在のウィンドウを隣人と交換するctrl-w H
現在のウィンドウを左端に移動ctrl-w J
現在のウィンドウを下に移動ctrl-w K
現在のウィンドウを上に移動ctrl-w L
現在のウィンドウを右端に移動