Vim のブログ

テキストエディター Vim の魅力、使い方のコツを初心者にも分かりやすく伝えていきたいと思います。

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キーバインドを前提として、それに対して一部変更を行うためのものです。既存のキーバインドを丸ごと変えてしまうのではなくて、あまり違和感なく共存するようなキー割り当てを行うようにしましょう。