Ten Years of Vim

Matthias Endler

Vimと過ごした10年

原文は Matthias Endler により に公開されました。 このブログを購読する

初めてうっかりVimを開いたとき、これは壊れていると思った。キーを叩くたびに画面が予測不能な動きをし、元に戻してとにかく終了したい一心だった。言うまでもなく、不快な体験だった。それでも何かに惹かれて何度も戻ってきてしまい、やがてメインエディタになった。

それから10年が経った今も(!)、僕はまだVimを使っている。TextMateやAtom、PhpStormなどいろいろ試してきたが、結局一番落ち着くのはVimなのだ。よく聞かれる。「なぜ?」と。

なぜVimなのか

Vim以前は、メモ帳やnanoなど、他のエディタをいろいろ使っていた。どれもだいたい想像どおりに動く。文字を入力し、矢印キーやマウスでカーソルを動かし、Control + Sやメニューバーから保存する。VI(そしてその精神的後継であるVim)は違う。

Vimでは、すべてが違う。だからこそ、圧倒的に効率的なのだ。説明しよう。

Vimの禅

Vimの背後にある哲学を理解するには少し時間がかかる。他のエディタがテキストを扱う上で中心に置くのは書くことだが、Vimが考える中心は編集することだ。

実際のところ、僕が新しいテキストを書き続ける時間はそう長くない。むしろ、既存のテキストを編集している時間の方が圧倒的に長い。
テキストをこね、形を整え、ひっくり返す。文章を書くことは職人技であり、重労働だ。冷たく素手で思考をこねくり回し、どうにかまとまった形になるまで成形しなければならない。この苦痛に満ちたプロセスを、少しでもマシにしてくれるのがVimだ。コントロールを失わないように助けてくれる。そのために、テキストを修正するための鋭く効率的な道具を提供してくれる。Vimの核は、テキスト編集のための言語なのだ。

言語としてのVim

Vimのコマンドは不可解ではない。すでに知っているものばかりだ。

  • undoするなら、uと打つ。
  • 次のtfindしたいなら、ftと打つ。
  • a wordをdeleteするなら、dawと打つ。
  • a sentenceをchangeするなら、casと打つ。

たいていの場合、実行したい操作と対象を思い浮かべ、それぞれの単語の頭文字を取れば、正しいコマンドを推測できる。ぜひ試してみてほしい。もし何かおかしくなっても、ESCを押してuで元に戻せばいい。

操作:delete、find、change、back、insert、append、…
対象:word、sentence、parentheses、(html) tag、…(:help text-objects参照)

テキストの挿入も、iで呼び出せる編集操作の一つにすぎない。だからデフォルトではノーマルモード——コマンドモードとも呼ばれる——にいるのだ。そこではこれらの操作がすべて機能する。

これさえ分かれば、Vimはずっと分かりやすくなる。そして生産的になっていく。

ワークフローはこの10年でどう変わったか

初心者の頃は、もっとVimを使いこなしている人がどうエディタを使っているのか、とても気になっていた。長年使ってきた今、その答えを書いてみる。秘密の妙薬なんてない。確かに、一日中テキストを編集しても疲れにくくなったとは感じるが、僕が使っているコマンドの90%は付箋一枚に収まる。

とはいえ、年を追うごとにVimの使い方は変わっていった。
いくつかのフェーズを経てきた。

1年目:テキストを挿入して終了できれば御の字。
2年目:面白くなってきた、もっとショートカットを覚えよう。
3〜5年目:機能を片っ端から盛り込もう!!!
6〜10年目:.vimrcはたった5行。

3年目あたりから、本格的にVimのエコシステムを学び始めた。MacVimのような派生版やjanusのようなディストリビューションもいろいろ試した。一時期は自作のVim設定までメンテナンスしていて、400行近くあった。

そうした経験は、どんなものがあるのか知るうえで確かに役立った。ただ、Vim初心者におすすめできるかというと微妙だ。結局、そんなものはそれほど必要ない。素のVimでも十分に使えるのだから、まずはそこから始めればいい。

今のVim環境はかなりミニマルだ。プラグインはもう使っていない。面倒だというのもあるし、組み込みのコマンドやマクロで代用できるからだ。

ワークフローがどう変わったか、具体例を3つ挙げよう。

  1. 最初は「数字を使った移動」をよく使っていた。たとえばbというコマンドはテキスト上で1単語戻るが、5bとすれば5単語戻れるというものだ。今はたいてい/で目的の単語を検索して移動する。こちらの方が速いからだ。

  2. テキスト内を移動するのに矢印キーはもう使わず、hjklを使うように自分を矯正した。こちらの方が速いという人も多い。数年試してみたが、少なくとも自分にとってはそうでもないと思う。今はただ習慣で使い続けている。

  3. メインで使っているマシンでは、手早いテキスト編集にはVimを、プロジェクトでは素晴らしいVimプラグインを入れたVisual Studio Codeを使っている。こうすればいいとこ取りができる。

今でも苦手なこと

これだけ長く使っていても、まだまだVimマスターには程遠い。他のVimユーザーが言うように、みんな学び続けているのだ。

もっとうまくなりたいと思っていることをいくつか挙げてみる。

  • 長いテキスト内での移動:検索(/)や対応する括弧へのジャンプ(%)、特定の行へのジャンプ(たとえば10行目なら10G)といった基本は知っているが、移動にもっとシンボルを活用したい。
  • ビジュアルモードでテキストを移動する:移動させたいテキストを切り取る(削除する)のに、正しい文字の組み合わせを入力するのが複雑なことがある。そんなときに威力を発揮するのがビジュアルモード(v)だ。選択範囲がハイライトされる。もっと使うべきだと思う。
  • コピー&ペースト用の複数レジスタ:今はテキストのコピーにレジスタ(いわば貼り付け用のクリップボード)を1つしか使っていないが、Vimは複数のレジスタをサポートしている。複数のものを同時に移動させたいときに便利だ。もっと活用しよう!
  • タブタブの仕組みは知っているが、入力がどうもぎこちない。だからあまり積極的には使ってこなかった。その代わり、大きなプロジェクトではたいてい複数のターミナルタブやVimキーバインド対応のIDEを使っている。

もう一度Vimを学ぶか?

難しい質問だ。

一方では、ノーと答えたい。Vimの習得には急な学習曲線があるし、最近のIDEはユーザーの意図を理解するのがどんどん上手くなっていて、テキスト編集自体が全体的にずっと簡単で速くなっている。

他方では、Vimは僕にとって思考やコードを最も速く書き留める手段だ。おまけに、どのマシンでも動き、これから何十年も存在し続けるだろう。対照的に、IntelliJのショートカットが10年後も通用するかは分からない(補足:もし未来のあなたがこの文章を読んで「IntelliJって何?」と思ったなら、答えはノーだったということだ)。

まとめ

もし一つだけアドバイスできるとすれば、コマンドを暗記してVimを覚えようとしないことだ。代わりに、今のワークフローを見直して、どうすれば改善できるかを考え、Vimがそれをどう楽にできるかを見てみよう。他の人がVimを使っているところを見て刺激を受けるのもいい(YouTubeリンク、音声あり)。

テキストを書くことには多くの時間を費やすことになる。だから、一つのエディタを本当に使いこなせるようになるための時間投資は十分に価値がある。特にプログラマーならなおさらだ。

10年経った今、Vimは僕の頭に染み付いている。テキストを編集するとき、僕はVimで“考える”。それはもう一つの自然な言語になった。これからの10年も楽しみだ。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント