134

VIMを使用しているときは、常に複数のウィンドウが表示されます。時々私はそれらのウィンドウを場所で交換する簡単な方法が欲しいです。これをより簡単にするプラグイン、マクロなどはありますか?ところで、私はMiniBufExplorerを使用しています。

4

5 に答える 5

331

ある程度の制御を可能にする便利なコマンドがいくつか組み込まれていますが、包括的ではありません。主なものは次のとおりです。

  • Ctrl- Wr(つまり、押し続けるCTRL、押すW、離すCTRL、押すr)-ウィンドウを回転させます(最初のウィンドウが2番目のウィンドウになり、2番目のウィンドウが3番目のウィンドウになります)。

  • Ctrl- Wx-現在のウ​​ィンドウを次のウィンドウと交換します

  • Ctrl- WShift----Hこのウィンドウを左端に移動します

  • Ctrl- WShift----Kこのウィンドウを一番上に移動します

(そして同様にCtrl- WShift-JおよびCtrl- WShift- L)。見る:

:help window-moving

詳細については。

于 2010-02-09T10:45:25.810 に答える
7

私はvimrcで次のコードスニペットを作成して使用し、Vimウィンドウをコピーして貼り付けています。

これは、たとえば次のショートカットを定義します。

  • <c-w>y:「ウィンドウをヤンクする」、つまり、現在のウィンドウのバッファの数をグローバル変数に格納します。
  • <c-w>pp:「現在のウィンドウの代わりにウィンドウを配置します」、つまり、以前に保存されたバッファ番号を読み取り、現在のウィンドウでそのバッファを開きます。また、現在のウィンドウにあったバッファの数も格納されます。

「これらのウィンドウを所定の場所で交換する」とは、「ウィンドウの位置を変更せずに、ウィンドウAのバッファをウィンドウBで開く、またはその逆の場合」を意味する場合、次のキーボードシーケンスを使用してウィンドウを交換できます。

  1. ウィンドウAを選択します(マウスまたはキーボードコマンドのいずれかを使用)
  2. <c-w>y(バッファ番号をヤンクする)を押します
  3. ウィンドウBを選択
  4. を押し<c-w>ppます(バッファを貼り付けます)
  5. ウィンドウAを選択
  6. を押し<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
于 2010-02-09T13:52:09.887 に答える
4

同じ頃に同様の質問をしました。任意に複雑なレイアウトを変更せずに、ウィンドウを具体的に交換する方法が必要でした提案されたソリューションの1つからvimプラグインを作成することになりました。それはWindowSwap.vimと呼ばれます; お好みのvimプラグインマネージャーでインストールして、回転させてください。

WindowSwap.vimを使用すると、簡単に

  1. <Leader>ywウィンドウをヤンクします。
  2. カーソルを別のウィンドウに移動します。
  3. <Leader>pwそのウィンドウを貼り付けて、最初のウィンドウの位置と交換します。

もちろん、キーの組み合わせは好みに合わせて構成できます。

于 2013-12-11T22:36:02.820 に答える
3

私の意見では、 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 現在のウィンドウを右端に移動します
于 2015-12-18T02:01:21.390 に答える
1

垂直方向と水平方向のウィンドウ分割が混在している場合、ウィンドウを回転<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>
于 2013-01-11T05:24:51.117 に答える