Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

今更vimに目覚めた男がLunarVimを使っている話

はじめに

vim に最近目覚めた。そこから NeoVim、LunarVim を使うようになった流れについて、自分が思う好きなポイントと絡めてまとめる。

書かないこと

  • エディタ戦争
    • VSCode も、vim も、emacs も、みんな違ってみんないい
    • あくまでも vim のココスキをまとめるので比較はしない

どうして vim か

VSCode を今まで使っていて、remote の接続が悪かったり重かったりしていたのでこれを機に、気になっていた vim に乗り換えてみた

vim を選んだ理由は、

  • 慣れるとコーディングスピードがすごいらしい
    • 脳とコーディングを直結したい
  • 軽そう
  • 使ってる人が多い
    • つまりググったときの情報が多い

という辺り。

どうして NeoVim か

vim について色々調べていると、どうやら新しい NeoVim というのがあるらしい*1事に気づいたのでそっちを使うことにした。 どうせ 0 から始めるなら、後から乗り換えしなくても済むようにしたいので NeoVim から始めた

vim すごい

オペレータとモーション

実は学生の頃にも先輩に勧められて vim を試していて、調べてみるとコマンドが多くて複雑そうで慣れるのに時間かかりそう…と思っていた。 「なんで丸かっこ内を削除するコマンドは di( なんだ…?」「dは delete っぽいけど i って何…?」などの疑問が出てやめてしまった。

が、今回調べ直して知ったがどうやらコマンドはオペレータ、モーション、テキストオブジェクトの組み合わせになっているらしく、それを知るとむしろすぐ慣れることができた。 さっきの例だと d が削除のオペレーター、i(inner ()というテキストオブジェクトで、その組み合わせによって「()の内側を削除する」という結果になる。

さらに、これを応用すれば覚えてないコマンドでも自由自在にコマンドを作れる。「インデントの中をすべてコメントアウトする」を何も調べずに一発で出来たときは感動した。

拡張性

vim のコマンドを使うだけなら VS Code に vim プラグイン入れることでも出来るが、vim の場合は拡張性の高さもさらに使い勝手を良くしていると思った。

さらに、「デフォルトでは真っ更だから後はやりたいようにやりな」というのを vim から(勝手に)感じてる。なので、よく使う操作をコマンドの組み合わせを 0 から設定することができる。

プラグイン

超便利なプラグインが豊富にあるのも良い。ちょっとしたモーションを追加するものから、外観を一気に変えるものまで、なんでもござれ。

しかし

うまく行かないな〜と思っていたものがいくつかある

プラグイン多すぎ問題

vim の利点で書いた事と早速矛盾するが、世の中にはプラグインが多すぎる。

例えば vim からターミナルを使えるようにするプラグインをググるとめちゃくちゃ出てくる。 その中から今も動くものとか流行っているものとかを選定するのが大変。

NeoVim awesome もあるがそれ自体も複数あってなにがなにやら。

この辺は VSCode だと拡張機能マーケットプレイスがあって、人気なプラグインがすぐわかるしインストールも簡単だからスゲ〜と思う。

LSP

NeoVim で LSP(構文解析したり lint したりするやつ。Language Server Protocol)の動かし方がまだよくわからない、というか動かない。いくつかプラグインを入れて、設定して、バージョンごとに相性があって、試行錯誤して…

この辺も VSCode だとよしなにやってくれるからスゲ〜と思う

LunarVim の出会い

悩んでたら最近 LunarVim というのを記事を読んで知った

NeoVim ディストリビューション(そういうのもあるんだというのもここで知った)の1つらしく、名前もかっこいいし使ってみた

最初から機能十分

LSP が最初から動くようになっていて、ファイルを開くと拡張子をみて自動的に LSP をインストール、起動してくれる。これがとても便利、かなり VSCode でできていたことに近づいてきた。 他にも最初からプラグインが色々入っていて、まっさらな状態の時点で十分に便利。もちろんそれらの設定も可能。

vim の良さとして最初は何もなくて後とから拡張できる、というメリットに反している…と思ったけど前言撤回。 VSCode に慣れてしまった自分にとってはエディタに求める当たり前品質が多いのと、現代のソフトウェア開発は複雑度が高まっていてそれに追従できるための道具としてのエディタも求められる機能が増えている、と思った。

カスタマイズもできる

とはいえ、カスタマイズも十分できるしプラグイン追加も可能。素の NeoVim で難しかったことが簡単に出来るようになりつつ、使っていたキーコンフィグ・プラグインも使えて今のところ LunarVim に落ち着いている。

今の見た目はこんな感じ

便利なプラグイン

最後に自分が使っているプラグインを抜粋して紹介する。

phaazon/hop.nvim

https://github.com/phaazon/hop.nvim

楽にカーソル移動できるようになるプラグイン。 カーソルから手を離さずに移動したい場所へカーソル移動が出来るようになった、これのお陰でマウスを使うことが激減した。

nvim-neo-tree/neo-tree.nvim

https://github.com/nvim-neo-tree/neo-tree.nvim

ディレクトリやファイルをツリーで見られるプラグイン。業務で使うときは大量のディレクトリを行ったり来たりするので必須。

echasnovski/mini.nvim

https://github.com/echasnovski/mini.nvim

独立した小さめのプラグインてんこ盛りのプラグイン。2024 年 6 月現在 40 個のプラグインがあり、それぞれ個別で使うことも出来る。痒いところに手が届いて、ほとんどはここからプラグインを選んで完結する。

特にmini.surroundはもうこれ無しでは生きられない体になった。

*1:この記事を書いてる時に知ったが、NeoVim は vim の新しいもの、という事ではないらしい。NeoVim は vim を fork して作られたもので開発者も違うしそれぞれ独自路線を進んでいる。