投稿日: 2025-04-28
Neovim を好む理由を整理しておくことで、生成 AI 時代以降のエディタ環境の趨勢に対応していきたい。
ここ最近は、生成 AI を用いたツールへ対応しようと、色々調べたり使ってみたりしている。 直近では、MCP とエージェントについて重点的に調べていた。 特にエージェントを調べていると、やっぱり Cursor や Cline、あるいはそれに準ずるエディタが必須なような感じがしてくる。 Vim や Neovim でも、有志の方々が似たコンセプトのプラグインを開発しておられたりする。 とはいえ、やはりいつかは Neovim を諦めて、そういったオリジナルを使うことは避けられないかもしれない。
できれば、このまま Neovim を使い続けたい、と思っている。 でも、よくよく考えるとなぜそう思うかという理由はちゃんと整理できていない。 整理してみたら、「それ Cursor のほうが上手く出来るよ?」となるのかもしれない。 内心では「今のところそうはならんだろうけど」という気持ちは割とあるけども。
Neovim が良い、と思う理由をざっと書き出すと、以下のような感じになると思う。
- キーボードだけでエディタで可能なすべての操作が可能となる
- Terminal からすぐ起動出来る
- 任意の操作のショートカットが簡単に作れる
- 検索が使いやすい
- 拡張機能が作りやすい
- メモが取りやすい
- コードに色がつけられる
これらについてもう少し踏み込んでみる。
その前に…
まず、ほかのツールを下げたい気持ちは一切ないことを表明しておきたい。 それぞれのツールにそれぞれの短所・長所があり、あとは使う人それぞれの好みで選ばれるものだと思う。 エディタ戦争なんてのは誰かの妄想に過ぎない。
キーボードだけでエディタで可能なすべての操作が可能となる
結局はこれが一番の理由になってしまう。 最近の GUI な IDE では、必ずこの点において、どこかに限界があるものだと思う。 Neovim を使う前に VS Code を使っていたときは、結構設定を頑張っていたつもりだったが、編集ペインの外ではポインティングデバイス抜きでは無理な場面も少なくなかった。
例えば、コードの折り畳み。 自分はコードを読むときに、脳みそのメモリ節約のために折り畳みも良く使うけど、それもキーボードだけで快適に出来る。
プラグインを用いたファイル操作も手放せない。
ツリー形式のファイラは、neo-tree を使っている。
https://github.com/nvim-neo-tree/neo-tree.nvim
Vim の標準のキーバインドに良くなじんでおり、キーボードだけでほぼすべてのファイル操作がストレスなく出来る。 なんなら、mv, cp, rm あたりのコマンドは面倒なので、わざわざ Neovim を開いて neo-tree で操作することの方が多い。
あとは、テキストファイル編集中のカーソルの移動も、かなり思考と直結しやすいように思う。 プラグインを使ったモーションとかも不可欠で、ポインティングデバイス前提の IDE では、こういったことが実現できるのか分からない。 fuzzy-motion + kensaku.vim とかは、なんかもうすごい。
https://github.com/yuki-yano/fuzzy-motion.vim
https://github.com/lambdalisue/vim-kensaku
以下のような感じで、ローマ字入力で日本語も含めてカーソルのジャンプ先を決定できる。
Terminal からすぐ起動出来る
エディタはターミナルから起動出来てほしい。 ローカルサーバだとかファイル監視ツールだとか、フォアグラウンドで動かしたいものって結構あると思うので、ターミナルとの距離が近いのは大事だと考えている。 そして、Neovim からターミナルを呼び出すことも出来るので、距離は限りなく0に近いとも言える。
自分は tmux に依存しまくっているのも大きい。 tmux のセッションを複数作りながら、それぞれのセッションで別々のプロジェクトを渡り歩く感じになっている。
任意の操作のショートカットが簡単に作れる
Vim 的にはキーマップと言わないと怒られるっぽいけど、ここでは馴染みやすさからショートカットと呼ぶことにする。
例えば、自分の Neovim の設定ファイルには、以下のような設定がある。
nnoremap H ^
nnoremap L $
意味を簡単に説明すると、shift + h キーでカーソルを行頭に、shift + l キーでカーソルを行末に移動する、というもの。 標準の設定で h キーが左移動、l キーで右移動なのは有名なので、こういった設定を作るのはあるあるだと思う。
こういったシンプルなものだけでなく、以下のような変なものも作れる。
inoremap <C-a>day <C-r>=strftime("%Y-%m-%d")<CR>
inoremap <C-a>time <C-r>=strftime("%Y-%m-%d %T")<CR>
inoremap <C-a>tengu TENGU 👺 >
ショートカットは複数のキーシーケンスから構成されていても良く、上記の場合はそれぞれ ctrl + a からスタートする。 それに続けて、上から順に、
- day と入力すると、現在の日付が入力される
- time と入力すると、現在の日付と時刻が入力される
- tengu と入力すると、
TENGU 👺 >
と入力される(※)
という感じになっている。 これが結構便利で、プラグインなんかを使わなくても、発想次第で結構色々なことが出来る。
※ print デバッグが好きで、しばしばログの行頭に視認しやすい天狗の絵文字を入れたりするので、このようなショートカットを作った。 滑稽に見えるかもしれないけど、意外と便利なんですよ、これ…。
検索と文字列置換の使いやすさ
これは別に Vim, Neovim の特別な強み、というわけではなさそう。 ただ、sed のようなコマンドが組み込まれており、これを使っていると自然と正規表現が身についてくる感じがして、そこに恩恵を感じている。
正規表現って、何回か勉強して覚える機会があっても、使わないと絶対すぐに忘れてしまう。 自分の場合は、 Neovim を普段使いしはじめてから、正規表現がぱっと出てくるようになってきた(キャプチャとか小難しいことは調べないと出来ないけど)。
拡張機能の作りやすさ
言いかえると、簡単なものならプラグインを自分でも作れるよ、ということ。
ショートカットの話に近いかもしれない。 雑に言ってしまえば「ショートカットのような設定を込み入ったパッケージにしたのが Neovim のプラグイン」なので、ショートカットの設定が楽ならプラグイン作るのも楽なほうだよね、ということ。
以前に、競技プログラミングにハマっていたときは、コード提出用の CLI のラッパーなんかを作ったりしたことがあった。 今なら、ほとんど vibe coding のような感じで、めっちゃ簡単に作れちゃいそう。 https://github.com/maguroguma/vim-oj-helper
これなんかはとても単純なものだけど、同じものを VS Code で作るのは、拡張機能の開発初期に求められるハードルの高さがまったく違うと思う。
メモが取りやすい
だんだん Neovim が関係なくなってきた。
ただ、サッとメモを取る、となるとエディタの起動速度はめちゃくちゃ大事だと思う。 いくらプラグインを盛ったとしても、起動速度観点だと IDE には余裕で勝てちゃうと思う。
また、メモは書きやすさだけではなく、以前に書いたものを簡単に取り出せることも重要だ。
自分の場合は、かれこれ5年くらいは memolist.vim というプラグインのお世話になっている。
メモを保管するディレクトリをあらかじめ決めておくと、どの場所からもその場所にメモを新規作成できるし、検索して取り出すこともできる。
https://github.com/glidenote/memolist.vim
メモ系のプラグインは色々あると思うけど、いずれについてもファジー検索したり grep して目的のメモを取り出したり、というのは簡単に出来るようになっていると思う。
コードに色がつけられる
「どういうこと?」と思われるかもしれない。
これはかなり変な理由というか、自分の特性にひもづいたものだと思う。
具体的には quickhl というプラグインの話になる。
https://github.com/t9md/vim-quickhl
これはもう、リンク先の gif を見てもらう方が早いと思う。
私は、コードリーディング時などに、こんな感じでキーワードに色をつけないと中々集中して読めない。 特に、デバッグ時など、慎重に読みすすめるときほど必要だと感じる。
あとは、タイポを予防する効果なんかもあるので、個人的に大好きだし手放せないプラグインになっている。
おわりに
以上が私の「Neovim から離れられない理由」になる。 途中、よくあるお気に入りのプラグインの紹介みたいな感じになってしまった。
とはいえ、偽りなく整理したつもりなので「これを満たせるのなら他のツールにも移行できる」と堂々と言えるようにはなったと思う。 すでに現時点で移行が可能な状況なら、カニンガムの法則よろしく「Cursor ならもっと良い感じに出来るよ!」とアドバイスをくれる人が現れるかもしれない。