使ってます CtrlW VIM分割ウィンドウ間を移動します。これを行うには別の方法がありますか?
たとえば、5つの分割ウィンドウを開いており、左上隅のウィンドウに移動したい場合は、 CtrlW それは多くのキーストロークを必要とするため、非常に不快です。
このような設定をしてみませんか?
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
はるかに速い...
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
詳細については。
この回答 のおかげで、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が要求していたウィンドウ間の移動以上のものを説明していることを認識しています。サブモードを作成することはかなり便利だと思いますが、サブモードで複数のアクションを実行できる場合にのみ重要です。
続行すると、斜めの動きを作成できます<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