VIMを使用しているときは、常に複数のウィンドウが表示されます。時々私はそれらのウィンドウを場所で交換する簡単な方法が欲しいです。これをより簡単にするプラグイン、マクロなどはありますか?ところで、私はMiniBufExplorerを使用しています。
5 に答える
ある程度の制御を可能にする便利なコマンドがいくつか組み込まれていますが、包括的ではありません。主なものは次のとおりです。
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
詳細については。
私はvimrcで次のコードスニペットを作成して使用し、Vimウィンドウをコピーして貼り付けています。
これは、たとえば次のショートカットを定義します。
<c-w>y
:「ウィンドウをヤンクする」、つまり、現在のウィンドウのバッファの数をグローバル変数に格納します。<c-w>pp
:「現在のウィンドウの代わりにウィンドウを配置します」、つまり、以前に保存されたバッファ番号を読み取り、現在のウィンドウでそのバッファを開きます。また、現在のウィンドウにあったバッファの数も格納されます。
「これらのウィンドウを所定の場所で交換する」とは、「ウィンドウの位置を変更せずに、ウィンドウAのバッファをウィンドウBで開く、またはその逆の場合」を意味する場合、次のキーボードシーケンスを使用してウィンドウを交換できます。
- ウィンドウAを選択します(マウスまたはキーボードコマンドのいずれかを使用)
<c-w>y
(バッファ番号をヤンクする)を押します- ウィンドウBを選択
- を押し
<c-w>pp
ます(バッファを貼り付けます) - ウィンドウAを選択
- を押し
<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
そのウィンドウを貼り付けて、最初のウィンドウの位置と交換します。
もちろん、キーの組み合わせは好みに合わせて構成できます。
私の意見では、 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
現在のウィンドウを右端に移動します
垂直方向と水平方向のウィンドウ分割が混在している場合、ウィンドウを回転<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>