VSCodeからVimに乗り換えた

※この記事ではVimに移行した経緯についてのみ書く。具体的なVimの設定等については別途技術記事として書くつもりだ。

最近、
VSCodeからVimに乗り換えた。その理由の一つ一つを明確に挙げることはできないが、恐らく「かっこいいから」が最も適切な気がしている。TwitterVimmerVimの話題で盛り上がっているたびに、イケてるWeb系企業のプログラマVimを使ってライブコーディングするのを見るたびに、その思いは日増しに強くなっていった。私もああなりたい、と。もちろん、他の多くのプログラマがそうであったように、私もVimmerになることを志し、そしてあっさりと挫折した経験がある。Vimは難しい。Vimは決して使用者に媚びず、むしろ使用者の側からVimに染まることを要求してくる(これはVimmerの狂信性を思えば理解に難くない)。そもそも、初見で全く動かすことができないのは常軌を逸しているのではないか。駆け出しの頃にGitを使っていたら何かの拍子にVimが開いてしまい、必死に検索して四苦八苦しながらエディタを閉じた経験があるのは私だけではないと思う。このことから私のVimの第一印象は最悪であった。さらに当時は既に優秀なGUIのエディタが存在していたため私がVimを選択しなかったのは至極当然なことだろう。その時は確かAtomかなんかを使っていた。そして次にVSCodeに移行した。このどこかでVimにも挑戦して挫折した。もうこのままVSCodeでいこう、と思っていた。

「ダサい」指さばき

私は東京にあるベンチャーで一年半ほど開発のアルバイトをしており、主に自社サービスの開発に携わっている。一年半もいれば新しくアサインされた新人さんの質問対応をするようにもなる。そして、そこで考えさせられる出来事が起こった。
新人さんのバグフィックスを手伝っていた時である。「ここの記述をこうすればいいんじゃないですか。」と特定の記述の修正を提案した。そこで、その方はVSCodeを使っていたのだが、矩形選択を使って記述を直し始めた。同一の記述が並んで二行、さらに一行飛ばして下にも同じ記述があったので、その三箇所を同時に選択して修正していた。この時は私は非常に感心した。それは以下の理由からである。
まず一つが、全てをキーボード操作で行っていたことである(私はVSCodeで矩形選択するのに、Shift+Altを押しながらトラックパッドを操作していた)。次に、行を飛ばして同一の箇所を選択していたことである。これはシンプルにどのように実現しているのかよく分からなかった。調べたところ、マルチカーソルというVSCodeの大きな特色とも言える機能らしかった。しかし、私はそれを知らなかったのだ。

私は恥じた、キーを押しながらトラックパッドで矩形選択する己の指さばきの隠しようもない「ダサさ 」に(もう一つ恥じるべきはVSCodeを使っていながらその主要な機能も知らないエディタへの無知・無関心だが、この時は特に気にしていなかったように思う)。 そこで、「かっこいい」指さばきを志した。基準は簡単。トラックパッドをベタベタ触ればかっこ悪い、キーボードだけで完結すればかっこいい、だ。その週の休日から、私は家のデスクトップPCでVimの練習を始めた。もちろん、VSCodeのショートカットを覚えるという手もあっただろう。しかし、VSCodeは腐ってもGUIだ。VSCodeの機能はトラックパッドを使うことを前提に最適化されている。マルチカーソルもトラックパッドを使う方がやりやすいし、Gitのコンフリクト解消などもポチポチ押すことを前提として作られているだろう。そもそも全ての操作にキーボードショートカットが割り当てられているかも分からない。となると、VSCodeを使って実現できるのは「できるだけトラックパッドを触らない」状態だ。たとえ上手くやったとしても、私が定義したところのダサさの成分は残る。
ということで、必然的にVimを習得することにしたのだった。

CLIは「かっこいい」

CLIGUIについても言及しておきたい。私はCLIが好きだ。そもそもプログラマを目指した原体験に、「黒画面、緑文字のターミナルに文字を打ち込む、映画に出てくるようなハッカーへの憧れ」があるからだ(実際に私のターミナルの色はその通りになっている)。ということで、私はできるだけCLIで色々なことを行うようにしている。と、思っていたが、その実エディタはVSCodeなのだった。こだわりはせいぜいGit操作にsourcetreeを使わないくらいだ。
しかし、私がGUIをあまり好まないということは確かだ。GUIのアプリケーションを開くとメニューが並んでおり、さらにそのメニューの中にも色々な項目があり...嫌気がさす。それは私がそのように配置したものではない。いきなり他人の部屋に連れてこられたようなもので居心地が悪いのだ。結局はその中のいくつかの機能を使うことになるが、使わない機能についてもいちいち目にしなければならない。そこで暮らしていながら開けていない部屋や物置がたくさんあるようなものだ。必要なものだけ手元に置いて、またさらに必要なものがあれば探して手元に置いて、自分が勝手を知っている自分の部屋にいるのが一番良い。という事で、私はVimで自分の部屋を作ることにしたのだ。
余談だが、私は同じ理由でソーシャルゲームもあまり好きではない。初めたはいいが、ショップやらストーリーやらバトルやら設定やらの大量のメニューを見せられるともう何から手を付けていいか分からなくなってやる気がなくなる。

Vimは楽しいものだった

さて、私は現在このブログをVimで書いている。一回挫折しているおかげで基本的なキーバインドは理解していたので、Vimの急激な学習曲線をなんとか乗り越えることができた。プライベートの開発でもバイトの開発でももっぱらVimを使用するようになった。VSCodeはアンインストールはしないまでも、MacのDockからは姿を消している。colorshemeを変えて気分転換したり、プラグインを吟味したり、設定を模索したり、vimrc(私はneovimを使っているので正確にはinit.vim)を整理したり。あの日の挫折が嘘のように、それなりにVimを楽しむことができるようになった。私がVimを使い始めた時はプログラミング自体を始めてから数ヶ月程度しか経っていなかったため、そもそも根本的な部分の知識が不足していたことが挫折の原因として大きかっただろう。自分が何をやっているかを自分で理解できるようになってからは、驚くほどVimを楽しめるようになった。
また、Vimを使うことで自分の作業効率についても意識できるようになった。これはVSCodeでは得られない視点だった。自分が使う道具についてより多くを把握し、効率化できているかを考えることは、プログラマに限らず何かを"作る"職業においては重要な姿勢だ。それを身につけることができたVimには深く感謝している。これからも長く使い続けるつもりだ。