りんごとバナナとエンジニア

エンジニア修行の記録

【書評】「実践Vim」を読んだ

普段からエディタとしてVimを使っているが、ショートカットがなかなか身につかない。不便だと思ったときはその都度調べているので断片的な知識はあるが、もっとテクニックを体系的に身に着けて編集作業の効率を上げたいと思い、この本を読んでみた。

www.amazon.co.jp

作業の繰り返し

この本は目次だけ見ると単なるtips集に見えるかもしれないが、それだけではなくVimを使うときに持っておくと良い考え方にも触れている。中でも繰り返し触れられている最も重要な考え方は2つある。

  • Vimは同じ操作を繰り返すための機能が充実しているため、適切な粒度で操作を繰り返すことが作業効率につながる
  • 繰り返しとそれをundoできるコマンドを組み合わせることで、誤った変更を防ぎながらスピードを上げることができる

例えば、 . コマンドを使うことで直前の変更を繰り返すことができる。この「直前の変更」とはコマンド操作1つだけではなく、挿入モードに入ってから出るまでの一連の編集作業全てを含めることができる(ただし、途中でカーソルキーで移動してしまうと、それ以降の変更のみとなる)。このため、例えば書いている途中に考え事を始めたときなどに細かく挿入モードから出ておけば、考えが変わったときにそれまでの変更をすぐに取り消して書き直せる。
繰り返し用のコマンドがあるのは変更時だけでなく、検索・置換・移動などにも存在する。特にファイル全体の検索( n コマンドで次の候補へ移動) と、 f コマンドによる行内での文字検索 (; コマンドで次の候補へ移動) を使えば、カーソルキーをほぼ使わなくても移動が可能そうだ。もちろん行き過ぎたときに前の候補へ戻るキーも用意されている。 なお、Vimにはコマンドを実行する際に回数を指定できる機能もあるのだが、本書では回数が明確にわかる時以外は繰り返しコマンドで1回ずつ操作することを勧めている。1回の変更範囲が細かくなることで、変更すべきでない範囲を間違って変更してしまっても気づきやすくするためだ。

オペレータコマンド

また、この本にはVimのコマンドが羅列してあるだけではなく、コマンドの体系の説明が詳しく載っていることで、丸暗記から脱却できるような工夫もなされている。例えば、以前Google検索をしたときに ci" でダブルクオートの中の文字を削除して挿入モードに移るというコマンドを断片的に知っていたが、これはオペレータコマンド c (=変更) + デリミタ区切りのテキストオブジェクト i" の組み合わせであることがわかった。 c コマンドを押すことでオペレータ待機モードに移行し、変更範囲として i" を指定しているわけだ。
また、各tipsにはオペレータコマンドの一覧やテキストオブジェクトの指定方法の一覧など、体系に合わせたコマンドの一覧表が多く載っており、コマンドの応用の幅が広がる。例えば上記の i"a" にすれば、デリミタ自体も削除することができると知った。

今までVimのテクニックは場当たり的にしか身についてこなかったが、初めて暗記以外の方法で知識を増やすことができた気がする。この本はVimで不便を感じたときのリファレンスとして長くとっておきたい。