vimをカスタマイズして、使い慣れたキーバインドを設定する

文:Vincent Danen(TechRepublic) 翻訳校正:石橋啓一郎
2009-06-09 08:00:00
  • このエントリーをはてなブックマークに追加

 vimでもっともいらいらすることを1つ挙げるとすれば、それはデフォルトのカーソル移動キーだ。私はコマンドモードと挿入モードが別れていることは評価するが、長い間joeを使っていたため、私の指はjoeのコマンドを覚え込んでしまっている。長年の間、vimを使ってきた現在でさえだ。行末での入力を始めるのに、[ESC]、[$]、[i]とキーを押さなくてはならないというのは、まったくの時間の無駄に思える。行ごと、ワード数による移動(4wで4ワード先に移動する)は便利であり、必要に応じてこれらの機能を使うことは問題はない(そしてそれはよくあることだ)。

 vimでキーバインドの変更や追加を行うのは簡単であり、いくつかのコマンドを、ユーザーの指が覚えているものに変更するのは理に適っている。例えば、joeでは古いWordStarのキーバインドを使っており、行末への移動にはCTRL-E、行頭への移動にはCTRLーAを使う。以下の行を~/.vimrcに追加すれば、これらのコマンドをvimの中でも使えるようになる。

" map CTRL-E to end-of-line (insert mode)

imap  $i

" map CTRL-A to beginning-of-line (insert mode)

imap  0i

 これらの2つのコマンドは、特定のキーバインド(CTRL-EとCTRL-A)に対し、imapというキーワードを使って挿入モードを割り当てている。最後のパラメタは、そのキーバインドで実行される実際のキーコマンドとなっている。CTRL-Eを入力すると、[ESC]、[$]、[i]と順番に実行され、カーソルはその行の本当の行末に移動する。それぞれのキー入力は独立した別のものだ。同様に、CTRL-Aに割り当てられたキーコマンドは、[ESC]、[0]、[i]を順番に実行するというものであり、これはコマンドモードに入り([ESC])、行頭に移動し([0])、再び挿入モードに入る([i])というものだ。これらのコマンドは、挿入モードから離脱して、最後にまた挿入モードに入るということを前提にしているため、これらのキーバインドが挿入モードでだけ動作するよう、imapというキーワードを使用している。

 割り当てのタイプには、他に、すべてのモードで使えるmap、コマンドラインモードで使えるcmap、ノーマルモードで使えるnmap、ビジュアルモードで使えるvmapがある。これらのモードのタイプを使い分けることで、アクティブなモードに応じて異なる動作をするようにキーバインドを定義することができる。

 他の便利なキーバインドには、次のようなものがある。

" CTRL-C to copy (visual mode)

vmap  y

" CTRL-X to cut (visual mode)

vmap  x

" CTRL-V to paste (insert mode)

imap  P

 vimで、:help keymapping コマンドを実行することで、より多くのヘルプ情報を見ることができる。[CTRL]キーはC、[ALT]キーはMで表され(従って、ALT-Mはと表記される)、[SHIFT]キーはSと表される。

 使い慣れた一連のキーバインドを作成することは、新しいエディタの学習曲線を楽なものにしてくれる。vimの柔軟性は、vimのパワーを活用しやすくしてくれると同時に、vimを古くからの友人のように感じさせてくれるだろう。

この記事は海外CBS Interactive発の記事をシーネットネットワークスジャパン編集部が日本向けに編集したものです。 原文へ

  • コメント(2件)
#1 anonymous   2009-06-10 13:07:15
>行末での入力を始めるのに、[ESC]、[$]、[i]とキーを押さなくてはならない
[ESC], [A] でいけますよ。
それと行末で入力を始めるには [i] ではなく [a] でないと、行末の一文字手前で入力を始めることになります。そもそもそういうことがしたいのであれば、[ESC], [$], [i] じゃないとだめですね。

同様に、
>[ESC]、[0]、[i]を順番に実行するというものであり、これはコマンドモードに入り([ESC])、行頭に移動し([0])、再び挿入モードに入る([i])
これも [ESC], [I] でいけます。
#2 anonymous   2010-10-08 16:49:33
preタグの中だからといって < や > をエスケープしなくてよい訳ではないです。
全部非表示になってますね。 <c-a> 他すべて。 (実際半角)
  • 新着記事
  • 特集
  • ブログ