web-dev-qa-db-ja.com

別の方法でVIMウィンドウ間を移動する

使ってます CtrlW VIM分割ウィンドウ間を移動します。これを行うには別の方法がありますか?

たとえば、5つの分割ウィンドウを開いており、左上隅のウィンドウに移動したい場合は、 CtrlW それは多くのキーストロークを必要とするため、非常に不快です。

30
Adas

このような設定をしてみませんか?

nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

はるかに速い...

42
Rook

Vimrcでnnoremapコマンドを使用して、カスタムキーバインドを使用できます。

nnoremapの構文は次のとおりです。

nnoremap new_keybinding keystrokes

Nnoremapコマンドは新しいキー割り当てを割り当てます。これを通常モードで押すと、このコマンドに割り当てられている一連のキーストロークがVimにエコーされます。

[〜#〜] edit [〜#〜]nmapコマンドもあります。 2つの違いは、nmapは現在のキーバインドを上書きすることを許可しますが、nnoremapは上書きしないことです。 それらの違いは この答え で説明されています。

たとえば、これらの行を.vimrc

"Better window navigation
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l

これにより、 Ctrl+j、 Ctrl+k、 Ctrl+h、 Ctrl+l の代わりに Ctrl+Wj、 Ctrl+Wk、 Ctrl+Wh、 Ctrl+Wl 古いキーバインドを保持しながら、ウィンドウナビゲーション用。

検索することもできます:help key-mappings 詳細については。

4
Alexandros

この回答 のおかげで、Vim専用のSEサイトで、プラグインを使用してWindows管理専用のサブモードを作成する別の方法を思いつきました。つまり、キーの組み合わせで新しいモードに入り、いくつかのキーを使用してウィンドウでさまざまなアクションを実行できるようになります。

vim-submode をインストールしたら、vimrcにいくつかの行を追加して、新しいモードを構成します。

" Create a submode to handle windows
" The submode is entered whith <Leader>k and exited with <Leader>
call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

今、あなたは単に押す必要があります Leader+k 新しいモードに入る(これはsubmode#enter_with)の行で変更できますを押して Leader それを終了します。

" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')

これらの行で、新しいモードに入った後(with Leader+k<c-w>hjlkを通常モードで使用しているかのように、hjklキーを使用してウィンドウ間を移動できます。

" Resize windows with <C-yuio> (interesting on azerty keyboards)
call submode#map('WindowsMode', 'n', '', 'u', '<C-w>-')
call submode#map('WindowsMode', 'n', '', 'i', '<C-w>+')
call submode#map('WindowsMode', 'n', '', 'y', '<C-w><')
call submode#map('WindowsMode', 'n', '', 'o', '<C-w>>')

yuioを使用してウィンドウのサイズを変更できるようにするためのいくつかの数行(私はこれらのキーを選択します。これは、azertyキーボードではhjklの上の行にあり、使用します。qwertyキーボードで変更する方が便利かもしれませんが、わかりません)

" Move windows with <C-hjkl>
call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')

<C-hjkl>でウィンドウを移動しましょう。

" close a window with q
call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

そして、ウィンドウを閉じて新しい分割を作成するためのいくつかのマッピング。

let g:submode_keep_leaving_key = 1
let g:submode_timeout = 0

最後に、これらのオプションにより、キーを押したままにして、そのアクションを繰り返すことができます。

この回答は、OPが要求していたウィンドウ間の移動以上のものを説明していることを認識しています。サブモードを作成することはかなり便利だと思いますが、サブモードで複数のアクションを実行できる場合にのみ重要です。

1
statox

続行すると、斜めの動きを作成できます<C-w>別の方向に2回目。

  "move from bottom left to top right diagonally
  "Mnemonic: keyboard finger movement from j to i
  nnoremap <C-i> <C-w>l<C-w>k 

  "move from top right to bottom left diagonally
  "Mnemonic: keyboard finger movement from j to n
  nnoremap <C-n> <C-w>h<C-w>j 

  "move from  top left to bottom right diagonally
  "Mnemonic: keyboard finger movement from j to m
  nnoremap <C-m> <C-w>l<C-w>j

  "move from bottom right to top left diagonally
  "Mnemonic: keyboard finger movement from j to y
  nnoremap <C-y> <C-w>h<C-w>k 
0
zundarz