vim
Vimでのキーマッピング
サーチ…
前書き
Vimのキーマッピングを更新すると、より記憶に残っているかアクセシブルな文字にキーコマンドを再割り当てするか、存在しない関数のキーコマンドを作成するといった2種類の問題を解決できます。ここでは、キーコマンドとそれが適用されるコンテキスト(すなわちvimモード)をマップするさまざまな方法について学びます。
基本的なマッピング
地図の概要
キーシーケンスは、 map
バリアントの1つを使用して別のキーシーケンスに再マップできます。
たとえば、次の典型的なmap
は、 j kをすばやく押すと、 挿入モードを終了します。
:inoremap jk <Esc>
地図演算子
さまざまなモードの:map
があります。
コマンド | モード |
---|---|
:map 、 :noremap 、 :unmap | ノーマル、ビジュアル、オペレーターペンディングモード |
:map! 、 :noremap! 、 :unmap! | 挿入モードとコマンドラインモード |
:nmap 、 :nnoremap 、 :nunmap | ノーマルモード |
:imap 、 :inoremap 、 :iunmap | 挿入と置換モード |
:vmap 、 :vnoremap 、 :vunmap | ビジュアルモードとセレクトモード |
:xmap 、 :xnoremap 、 :xunmap | ビジュアルモード |
:smap 、 :snoremap 、 :sunmap | 選択モード |
:cmap 、 :cnoremap 、 :cunmap | コマンドラインモード |
:omap 、 :onoremap 、 :ounmap | オペレーター保留モード |
通常は、 :noremap
亜種を使用する必要があります 。マッピングを再マッピングと再帰の影響を受けないようにします。
mapコマンド
-
:map
(または上記のバリエーションの1つ)を使用して、すべてのマッピングを表示できます。 - 特定のキーシーケンスの現在のマッピングを表示するには、次のようにし
:map <key>
<key
>は一連のキーです - Escのようなスペシャルキーは、
<Esc>
ような特殊な<>
表記を使用してマップされ<Esc>
。キーコードの完全なリストについては、 http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodesを参照してください。 -
:nmapclear
- すべてのノーマルモードマップをクリアする -
:nunmap
- ノーマルモードマップのマップを解除する -
timeout
とttimeout
変数を変更することで、シーケンスのキー間の最大時間を設定できます
例
-
imap jk <Esc>
:挿入モードでjk
を入力すると、通常モードに戻ります -
nnoremap tt :tabnew<CR>
:通常モードでtt
を入力すると、新しいタブページが開きます -
nnoremap <Cj> <Cw>j
:通常モードで<Cj>
を入力すると、左下のウィンドウにジャンプします -
vmap <Cc> \cc
:ビジュアルモードで<Cc>
を入力すると、\cc
(行をコメントするNERDCommenterコマンド)が実行されます。これはプラグインのマッピングに依存するため、使用できません:vnoremap
here!
futher読んこちら
マップリーダーキーの組み合わせ
リーダーキーは、エンドユーザーが上書きできるキーバインディングを使用してマッピングを作成する方法として使用できます。
リーダーはデフォルトで\キーです。これを無効にするには、エンドユーザーはマッピングを定義する前に:let g:mapleader='somekey(s)'
を実行する必要があります。
典型的なシナリオでは、Mapleaderは.vimrc
に設定され、プラグインはマッピングのキーバインディング部分に<Leader>
を使用してカスタマイズ可能にします。
プラグインでは、次のようにマッピングを定義します。
:nnoremap <Leader>a somecomplexaction
これは、\ +キーの組み合わせにsomecomplexactionアクションをマッピングします。
リーダーなしのアクションは変更されません。
<Plug>Mappings
を使用して、プラグインのキーバインドをカスタマイズする余地を残すことも可能です。
基本的なマッピングの図解(便利なショートカット)。
ほとんどのテキストエディタでは、現在のドキュメントを保存するための標準ショートカットはCtrl + S (またはmacOSではCmd + S )です。
Vimはデフォルトでこの機能を持っていませんが、これをマップすることで作業が簡単になります。 .vimrc
ファイルに次の行を追加すると、そのジョブが実行されます。
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
nnoremap
コマンドは、 Ctrl + Sを:w
(現在の内容をファイルに書き込む)コマンドにマップしますが、 inoremap
コマンドはCtrl + Sを:w
コマンドにマップし、挿入モードに戻ります( <co>
コマンド<co>
<esc>:w<cr>a
ような他の解決策が保証できないカーソル位置を変更することなく、後で挿入モードに戻ります。
同様に、
" This is commented, as Ctrl+Z is used in terminal emulators to suspend the ongoing program/process.
" nnoremap <c-z> :u<CR>
" Thus, Ctrl+Z can be used in Insert mode
inoremap <c-z> <c-o>:u<CR>
" Enable Ctrl+C for copying selected text in Visual mode
vnoremap <c-c> <c-o>:y<CR>
PS:ただし、ssh(またはPuTTY)を使用しているときにCtrl + Sが期待通りに機能しない可能性があります。これに対する解決策はこのドキュメントの範囲内ではありませんが、 ここで見つけることができます。