Vimの極意

この記事はVim Advent Calendar 2022の1日目の記事です。

今年でVimをメインエディタにして15年になります。
最近どうすれば思考する速度でテキストを編集できるようになる*1のか考えたりすることがあったので、この機会に軽くまとめてみます。

簡単な操作であれば「○○をしたい」と思った瞬間にそうなっていることもありますが、実際はそうならないことがの方が多いです。
それが何故なのかというと、複雑な編集をする際には自分のやりたいことをVimの操作に変換する必要があり、そこに時間がかかっているからだと考えました。

そこで思いついたのが、やろうとしていること自体をVimのコマンド群として捉えられるようになればさらに高速にテキストを編集できるのではないか、ということです。

具体例をあげてみると、以下のようなGoのコードでカーソルがfuncのfにある時に、戻り値の型をClientInterfaceから*Clientに変更したいと思ったら、

func NewClient() ClientInterface {
    return newDefaultClient()
}

戻り値の位置にカーソルを移動して、カーソル下の単語を*Clientに書き換えよう、と考えてVimを操作するのではなく、
最初から$bcw*Clientと考えてVimを操作します。

つまり、「あらゆる編集操作をVimのコマンドで表現できるようになる」ことがVimの極意ということになります。

実際に文章に書いて読んでみるとかなり難しそうな気がしてきましたが、
これを会得する方法としては以下の7つが考えられます。

  1. 極意のことを意識しながらVimを使い続ける
  2. 定期的にVimのヘルプを読み返してコマンドとしての語彙を増やす
  3. 指に負担を感じたら少し立ち止まってより良い方法がないか調べる
  4. VimGolfをやる
  5. 覚えにくい処理をユーザー定義コマンドやマッピングにする
    • vimrcを育てる
  6. 4で汎用性が高いものをプラグインにする
    • 既に似たようなプラグインがあればそれを使っても良い
  7. 5で有用なものをVimの本体に組み込む
    • Vim本体の実装に対する知識が必要

ある程度身に付いてくれば先のサンプルコードで戻り値の型がわからなくてもすぐに
/newD<CR><C-]>Wyiw<C-T>j%bcw<C-R>0<ESC>が出てくるようになることでしょう。

ぜひ試してみてください。

*1:実践Vim 第21章の続き