Vim のカスタマイズ 〜キー割り当て変更方法〜
キー割り当て変更
vi/Vimは最小限のキー操作で様々な事が行えるように作られています。ですが、
「どうしても使いにくいキー配置があるので、変えたい」、
「繰り返し行う複雑な操作を簡単に行いたい」ということがあります。
そんな時にキー割り当て変更が活躍します。
なお、キー割り当ての実例については、Vim のカスタマイズ 〜キー割り当て変更の実例〜 で紹介しています。
キー割り当て変更コマンド
キー割り当て変更コマンドは、下のように、モードごと、再割当(remap)の有無によって別の名前が割り当てられています。
モード | 再割当無し | 再割当有り |
---|---|---|
ノーマルモード+ビジュアルモード | noremap | map |
コマンドラインモード+インサートモード | noremap! | map! |
ノーマルモード | nnoremap | nmap |
ビジュアル(選択)モード | vnoremap | vmap |
コマンドラインモード | cnoremap | cmap |
インサート(挿入)モード | inoremap | imap |
このコマンドは、
コマンド名([n/v/c/i][nore]map]) <オプション> ユーザーが入力する操作 Vimが解釈する操作
という形で使います。オプションの有無は任意です。例えば、
nnoremap ; :
と.vimrcに記入すると、ノーマルモードで ; (セミコロン)が入力された時に、Vimは本来の機能を呼び出す代わりに : (コロン)が入力されたとみなして、コマンドラインモードに入ります。
nnoremap <C-c><C-c> :<C-u>nohlsearch<cr><Esc>
とすれば、 CTRL-C を2回押すことで検索文字列のハイライトを解除することが出来ます。この例のように < と > で囲うことで特殊なキーを指定することも出来ます。また割り当て先にコマンドラインモードのコマンド実行を指定することも出来ます。
キーの再割当て
nore がつかない、map/map!/nmap/vmap/cmap/imapといったコマンドを使った場合、キーの再割当てが発生します。つまり、Vimが解釈する操作は、「ユーザーが定義したキー割り当て」に従って行われます。これはユーザーの割り当てが変化するものである以上、混乱の元になる事が多いので、特に理由が無ければ noremap を用いて Vim の本来のキー割り当てによる指定を行う事をオススメします。
さらに詳しい情報
:h key-mapping
でヘルプを参照してみましょう。上記以外のモードに対応したコマンドや、<silent> や <buffer> といったオプションについても説明があります。
キー割り当ての注意
キーを機能に割り当てるのではなくて、別のキーを割り当てるようになっていることから分かるように、この機能は、元々、vi / Vim のキーバインドを前提として、それに対して一部変更を行うためのものです。既存のキーバインドを丸ごと変えてしまうのではなくて、あまり違和感なく共存するようなキー割り当てを行うようにしましょう。