やる気がストロングZERO

やる気のストロングスタイル

開発作業でVimを普段使いするためにやったこと

Vim普段使いにトライしようとした理由

JetBrains製IDEだと別言語の複数プロジェクトを並行して扱おうとするとフラストレーションが溜まる

僕はJetBrains製のIDEに頼りまくっていて、だいたいにおいて満足しているのだが、特定のシーンでよくフラストレーションが溜まっていた。

例えばあるプロジェクト(Rubyがメイン)で作業していて、ちょっと参考に別のプロジェクト(PHPがメイン)のコードを読みたいとき、わざわざPHPStormをインストールしてプロジェクト設定するのはめんどくさいし、かといって普段IDEに頼り切っているので別のエディタで読み進めるには効率が落ちる。

JetBrainsのIDEは言語毎に最適化されたIDEが提供されていることが、逆にこの辺りの事情にとっては仇となっているのかもしれない。 そういう意味ではvscodeをメインエディタにしていればこの辺りの問題は解決されるのかもしれないが、次の理由でVimをメインにすることにトライすることを選んだ。

VsCodeや各エディタのVimプラグインではなくVimを使いたい理由

vimには色々使いやすい部分があって、その一つに「全ての出力をvimで扱うテキストとして扱える」というのがある。

GUIエディタだと、

  • なにか文字列を検索してその結果表示が一覧されているリストをどこかにコピペしたいが、リストを対象にコピー操作出来ない
  • 大量のリストがでたのでそのリストを対象に文字列検索したいが、リストを対象にctrl-fが効かない

みたいなことにちょいちょい遭遇したりする。 特定の機能で表示された情報に対して、どのような操作が可能かはアプリケーションの仕様による、みたいなことになっている。

vimだとvim上に表示されるテキストはvimの基本操作の対象になるので、上記のようなことが起きない。

例えばプラグインディレクトリツリーを表示させたとして、それもただのテキストとして扱えるので(編集操作はできないようになっていたりするが、それさえも設定で可能にできる)それをまるまるテキストとしてコピーもできるし、文字列検索もできる。

こういったvimの特性も含めて「vimが便利かも」と思っていたので、他のGUIエディタに存在する「vimプラグイン」ではなく「vim」を使いたかった。 (どこかで見たが「vimプラグイン」は「vimプラグイン」であって「vim」ではない、というのはこういうところも含んだ意味であると理解している)

そういう感じで、vimをメインエディタとして普段遣いするための挑戦をすることにした。 、、というか、過去にも何度かトライしていて失敗しているのであった。

過去にVim使いになろうとして失敗した原因と今回の対策

使い方を一気に大量に覚えないと全く使えない

GUIであればショートカットを覚えていなくてもメニューや右クリックから操作できるので、とりあえず最初はマウスでポチポチしながら作業して、徐々にショートカットを覚えていく、みたいなことができるが、vimだとそうは行かない。

キーバインドが思い出せなければ作業が即詰んでしまう。
詰むとググったりして解決するまで作業ができない状態になるので、作業効率が絶望的に落ちてしまう。

そういった理由である程度キーバインドを覚えて調べずに使えるようになるまで実戦投入は出来ないが、使わないと覚えられないのでいつまでも使えない、、というデッドロックが存在する。

対策:マスタリングVimを読みながらankiに使い方を登録して一気に覚えた

ankiはその名の通り暗記をサポートしてくれるツールで、マスタリングVimを読み進めながらvimの使い方やキーバインドを全てankiに登録していき、これを一気に覚えた。 これにより「ある程度はvimで作業できる」状態にまで一気に持っていくことができた。

マスタリングVim

マスタリングVim

  • 作者:Ruslan Osipov
  • 発売日: 2020/04/16
  • メディア: 単行本(ソフトカバー)

僕はIDEの定義場所ジャンプや参照先検索やコード補完に依存しているのでこれがないと効率が落ちる

メソッドの定義場所ジャンプや参照先ジャンプやコード補完機能にどっぷり依存しているので、これらがストレスなく使えないと生産性が落ちる。 vimにもctagsをつかったタグジャンプやctrl-Pを使ったコード補完もあったが、IDEの提供してくれているこれら機能には遠く及ばなかった。 結局、ここぞという作業ではIDEを開かざるを得なかった。

対策: LSPを使う

昔はなかった(気がしている)が今はLSPというものがあり、これを使えば上記の機能が提供されているらしい。

参考)Big Sky :: Vim をモダンな IDE に変える LSP の設定

※LSPがなくても、各言語ごとにこういった機能を提供してくれているプラグインはあるっぽい。LSPとは統一されたプロトコルが提供されたことで、これら機能をエディタ毎に開発する必要がなくなった、という認識でいます。

結構快適に使えている

上記手法により、今はvimをメインエディタとしてなかなか快適に作業できている。 快適ポイントとしては以下。

対象ファイルを探して開くのが早くなった

いままで対象ファイルを開く時(特にプロジェクト外のファイルの場合)フォルダを開いて「どこだっけな?」みたいにポチポチやってたが、vimにしてからはCtrl-Pとファイル名を少し打てば見つかるので楽になった。 ただし、細かいディレクトリ構成は意識しないと頭に入らないのは注意しないといけない感じ。

アプリの行ったり来たりがなくなって作業が楽になった

こっちのプロジェクトを開いているIDEと、あっちのプロジェクトを開いているIDEと、メモ用txtを開いているエディタでアプリ切り換えを行ったり来たりたりしなくてよくなった。 各アプリでの設定の差や操作方法の差に翻弄されることが無くなった。

マウス操作が格段に少なくなって楽になった

マウスに手を伸ばす機会が激減して手や肩への負担が減った気がする。

とはいえ、ググったり、メールを見たり、slackに返信したりはマウス使う機会はまだまだある。

オープンソースのコードリーディングが捗る

ちょっとオープンソースのコードを読みたい時、IDEのインストールから始めなくて良いので心理的ハードルがかなり下がった。

それでもまだたどたどしい

vimでの作業にだいぶ慣れてきたとはいえ、まだまだ手に馴染んでいなくて「うっ、、」となる事もある。

ワークスペースがまだ安定してない

vimのタブやwindowやtmuxのペインなどの使い分けが自分のなかでまだ定まっていない。 コード内をジャンプしたり、別ディレクトリのファイルを開いたりしている内にもとの作業場所を見失ってしまって「さっき開いていたファイルどれだっけ??」てなったりする。

たまに未知の操作に遭遇し詰む

まだ、たまにvim上でやったことがない操作にぶち当たって、どうすればいいのかちょっと調べても分からず、やむを得なくIDEコマンドラインを開いて操作したりすることがある。 地味にファイルのコピーや新規ファイル追加などが盲点でこれになった。今もまだうろ覚え。

落ち着いていないと詰む

普段落ち着いて作業しているときは問題なくても、焦ると操作が全くできなくなったりする。 例えばコードレビューや、なにか教えてもらいながら作業している時など、よくテンパって「あれ?ペーストできない?もう一回ヤンクして、あれ、へんなところにペーストされた、、ちょっと消して、あ、ヤンクが変に上書きされてしまった、、」みたいに、コピペ程度でもうまく操作できなかったりしてしまう。

よくわからない挙動がある

自分の環境だからなのかなんなのか、本やサイトで解説されている動作が自分の環境ではうまく機能しなかったりするものがあったり、特定の条件で表示が変になったりする事がある。

LSPはまだ使いこなせていない

LSPでGoでいい感じに使えるのは確認できたが、Rubyではいまいちうまく動かせておらずどんな感じかまだよくわかってない部分が多い。

まとめ

いまのところ特にIDE戻りたい、という気持ちにはなっていない。
vimのほうが圧倒的に良い、ともなっていない。 なんとなくエンジニアリングをしている感、みたいなものはアップした。
JetBrainsは有料なので、これを払わずに済むなら年2万ちょいくらい?の利益になるが、これはそれほど大した額でもないので平行して使うのもアリなのかと思ってる。