読者です 読者をやめる 読者になる 読者になる

Vim のキーマッピングを設定するときに注意していること

Vim

Vim Advent Calendar 2011 の参加エントリです。
何を書こうか迷ったんですが、Vim のキーマッピングをカスタマイズする際に個人的に気を付けていることをまとめることにしました。
あくまで自分の Vim の使い方なので、全ての人に「これを気を付けろ!」と言えるようなものではないですが、一つの例として参考にしていただけたらと。

はじめに

そうやって一口にVimというがね、僕が好きなのは僕のVimだけなんだ。ひとのVimは大嫌いだ。

僕が好きなのは僕のVimだけなんだ - 理想未来はどうなった?

これを読んで、「そうそう、そうだよね」となる人と、「何言ってんの?」となる人に分かれると思います。
前者は、Vim をバリバリカスタマイズしまくって、自分色に染め上げる気質の人で、後者はカスタマイズは最小限に済ませ、素の Vim を好む気質の人です。


カスタマイズしまくると、Vim がエディタ以上の何かになり、様々な作業を効率よくこなすことができるようになります。
反面、他人の Vim はもちろん、素の Vim でさえ、「あれ、この機能使えないんだっけ?」みたいになってはじめのうちは仕事になりません。


設定を最小限に済ませると、Vim さえ入っていれば何も戸惑うことなくその環境ですぐに作業できるようになります。
反面、プラグインを入れていれば一瞬なのに・・・という作業でも複数の手順を踏まなければならず、間違える可能性も上がってしまいます。


個人的には前者の「カスタマイズする方向」が合っているので、それなりにカスタマイズしているんですが、その際に「出来る限り素の Vim でも戸惑わなくて済む」ようにしています。
こうすることで、それなりにどの環境でもすんなり素に近い Vim を触れています*1

基本方針

キーマッピングを変更する際に、まずは既存機能が何か割り当てられていないか調べます。
そして、既存機能が割り当てられていた場合は、実際にその機能を使って見て、「自分は使わないな」と感じたらそこにマッピングしてしまい、「お、案外使えるじゃん」と感じたら他のものを考えることにしています。

既存機能の調べ方

そのキー (もしくはキーストローク) が割り当てられているかどうかを調べるには、まず help を使います。

help キーストローク

を実行します。何か割り当てられている場合はその説明が開きますし、割り当てられていなければエラーになります。


これだけでは不十分で、すでに自分の導入したプラグインや自分の設定したマッピングとかぶっている可能性があります。
そこで、verb を使ってそれも調べます。

verb map キーストローク

これを実行すると、キーストロークがすでに割り当てられていた場合、最後にそれを割り当てた場所が表示され、割り当てが無い場合は「マッピングはみつかりませんでした」と表示されます。

今まで割り当てを思いとどまったキーマッピング

覚えているのは ; と , で、他にもあったはずですが忘れちゃいました。
; は : と入れ替え、, は殺して にしてる人も多いかと思います。
が、この 2 つは割と便利で、結局マッピングを変更しませんでした。


; は、f や F で移動した際に、もう一度同じ移動を行うために使用します。
例えば、カーソルの位置を ^ で表したときに、

hogepiyofoobar
^

とあったとき、piyo の o に移動したいと思って fo としても、hoge の o までしか移動しません。
もう一度 fo とすれば piyo の o まで移動できるのですが、ここで ; を使うとストロークを 1 つ削れます。
また ; を押すと、foo の最初の o に、さらに押すと次の o に移動できます。


, は、この逆の動作をします。
本当は piyo の o まで移動したかったんだけど、foo の o まで移動してしまった・・・というときに、, とすることで piyo の o に戻れます。
Fo とするより(もしくは ll とか)、これも 1 ストローク削ることができます。


こんな感じで、便利な機能を殺さずに済んでよかったな、という話です。
もちろん、; よりも : の方が頻度が高いのは明らかなので、入れ替えるというのはアリなのですが、これを入れ替えていないのは他の環境を使った時に戸惑わないためです。
そういうことが少ないのであれば、入れ替えてしまったほうがいいでしょう。


明日は kozo2 さんです。

*1:さすがに、Caps Lock が A の横に無いとか、Esc が 1 の横に無い環境は戸惑いまくりですが・・・