Vimと過ごした10年
初めてVimを誤って開いたとき、壊れているのかと思いました。キーを押すたびに画面が予想もつかない動きをし、とにかく元に戻して終了したい一心でした。言うまでもなく、決して気持ちのいい体験ではありませんでした。それでも、なぜかまた使ってみたくなり、やがてメインエディタになっていきました。
あれから10年が経った今も(!)、私はVimを使い続けています。TextMateやAtom、PhpStormなどいろいろ試しましたが、結局いつもVimに戻ってきてしまいます。よく聞かれるのが、「なぜVimなの?」という質問です。
なぜVimなのか
Vimの前は、メモ帳やnanoなど、いくつものエディタを使ってきました。どれもだいたい想像どおりに動きます。文字を入力し、矢印キーやマウスでカーソルを動かし、Control + Sやメニューバーから保存する。VI(そしてその精神的な後継であるVim)は、それらとは違います。
Vimでは、すべてが違います。そして、それこそがVimを極めて効率的にしている理由です。順を追って説明します。
Vimの禅
Vimの思想は、すぐには腑に落ちないかもしれません。他のエディタがテキスト操作の中心を書くことに置いているのに対し、Vimが中心に置くのは編集することだからです。
実際、私が過ごす時間のほとんどは、新しい文章を書き下ろすことではなく、すでにある文章を編集することです。
テキストをこねて、形を整えて、ひっくり返す。文章を書くことは職人技であり、骨の折れる作業です。冷えた素手で思考をこね、なんとかまとまった形になるまで整えなければなりません。Vimは、そのつらい過程を少しでも耐えられるものにしようとします。コントロールを手放さずにいられるように、テキストを自在に操るための鋭く優れた道具を与えてくれるのです。Vimの核にあるのは、テキストを編集するための言語です。
言語としてのVim
Vimのコマンドは難解ではありません。実は、もうご存じのはずです。
- 元にundo(戻す)したいなら、
uと入力します。 - 次のtをfind(探す)したいなら、
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はぐっと理解しやすくなり、そこから生産性が上がり始めます。
年月とともに変わったワークフロー
初心者のころは、Vim歴の長い人がどんなふうにエディタを使っているのか、とても気になっていました。長年使ってきた今なら、こう答えられます。特別な秘訣なんてありません。一日中テキストを編集しても、確かに疲れにくくはなりましたが、普段使っているコマンドの90%は付箋一枚に収まります。
とはいえ、年月のなかでVimの使い方は変わってきました。
いくつかの段階を経てきたのです。
1年目:テキストを挿入して、無事に終了できれば満足です。
2年目:これは面白い、もっとショートカットを覚えてみよう。
3〜5年目:ありとあらゆる機能を盛り込もう!!!
6〜10年目:.vimrcはたった5行です。
本格的にVimのエコシステムを学び始めたのは3年目のことです。MacVimのような派生版や、janusのようなディストリビューションもいろいろ試しました。しばらくは自作のVim設定を管理していて、その行数は400行近くになっていました。
それらを通じて何があるのかを知れたのは確かですが、Vim初心者におすすめできるかと聞かれると、首をかしげます。そもそも、そういったものは本当は必要ありません。素のVimから始めれば、それで十分なのです!
今の私のVim環境は、かなりミニマルです。もうプラグインは使っていません。半分は面倒だから、半分は組み込みのコマンドやマクロで代用できるからです。
ここで、年月を経てワークフローがどう変わったか、具体例を3つ挙げてみます。
最初は「数字を組み合わせた移動」をよく使っていました。たとえば
bはテキスト上で1単語戻るコマンドですが、5bとすれば5単語戻れます。最近は、一致する単語へ移動するのに/を使うことがほとんどです。こちらの方が速いからです。テキスト内を移動するのに、もう矢印キーは使いません。無理に
h、j、k、lを使うようにしました。こちらの方が速いと言う人も多いですが、数年試した結果、(少なくとも私にとっては)そうではないと思います。今では単に習慣で使い続けています。メインで使っているマシンでは、手早くテキストを編集するときはVimを、プロジェクトではVisual Studio Codeに素晴らしいVimプラグインを入れて使っています。こうすることで、両方のいいとこ取りができています。
今でも苦戦していること
これだけ長く使っていても、私はまだまだVimマスターには程遠い存在です。他のどんなVimユーザーに聞いても、みんな「まだまだ勉強中だよ」と答えるでしょう。
もっとうまくなりたいと思っていることをいくつか挙げてみます。
- 長いテキスト内での移動:検索(
/)や対応する括弧へのジャンプ(%)、特定の行へのジャンプ(10行目なら10G)といった基本は知っていますが、移動にもっとシンボルを活用できるはずです。 - ビジュアルモードでのテキスト移動:移動させたいテキストを切り取る(削除する)のに、正しいキーの組み合わせを入力するのが複雑になることがあります。そんなときに威力を発揮するのがビジュアルモード(
v)です。選択したテキストがハイライトされます。もっと積極的に使うべきです。 - コピー&ペーストのための複数レジスタ:今はテキストのコピーに一つのレジスタ(貼り付け用の置き場のようなもの)しか使っていませんが、Vimは複数のレジスタをサポートしています。複数のものを同時に動かしたいときに便利です。もっと活用していきたいと思います!
- タブ:タブの仕組みは知っていますが、入力がどうもぎこちなく感じられます。そのため、あまり使い込んでいません。代わりに、大きなプロジェクトでは複数のターミナルタブや、Vimキーバインドを備えたIDEを使うことがほとんどです。
もう一度Vimを学ぶか?
答えるのが難しい質問です。
一方では「いいえ」と答えるでしょう。Vimの習得曲線は急ですし、最近のIDEはユーザーの意図を汲み取るのがどんどん上手になり、テキスト編集全般がはるかに簡単で速くなっています。
他方では、Vimは私にとって思考やコードを書き留める最も速い手段です。おまけに、どのマシンでも動き、これから何十年も使われ続けるでしょう。対照的に、IntelliJのショートカットが10年後も通用しているかどうかは分かりません(注:もし未来にこの文章を読んで「IntelliJって何?」と思ったなら、答えは「もう通用していない」かもしれません)。
まとめ
もし一つだけアドバイスできるなら、コマンドを丸暗記してVimを覚えようとしないことです。まずは今のワークフローを振り返って改善できないか考え、そこでVimがどう役立つかを見てみてください。他の人がVimを使っている様子を見る(音声ありのYouTubeリンク)のも、刺激になっておすすめです。
テキストを書く時間は膨大です。だからこそ、一つのエディタを本当に使いこなせるようになるための時間投資は、十分に価値があります。特にプログラマーならなおさらです。
10年経った今、Vimは私の頭にすっかり染み込んでいます。テキストを編集するとき、私はVimで思考しています。Vimは、私にとってまた一つの自然な言語になったのです。これからの10年が楽しみです。
記事をランダムに読む