はじめに
VSCodeのIDEよりも速度を求めに求め、Vimが操作自体の速さやカスタマイズ性の高さの魅力に気づいた前提がある。 (ということにしてね) そこで、比較的扱いやすいNeovimで環境構築を行なった際に関連して使う技術の良さに改めて気づいたという話。
環境構築を進める中で気づいたこと
- 複雑な情報は歴史的経緯を理解することで適切な要素同士に分解でき、整理できる(VimにおけるLSP設定の経緯)
- Neovimのように設定が多い場合はdotfilesが大活躍する
- dotfilesではシンボリックリンクが便利すぎてやばい
- GoってLSPもすごい?
1つずつ気づいたことをまとめる。
気づいたこと
VimにおけるLSP設定の経緯
まず、なぜ歴史を気にしたかというと、LSPを設定するにあたって nvim-lspconfigを使う、とかvim.lsp.configを使う、とか手段が色々あって どれを使ったら良いかわからなかったことが大きい。この未知に対して 生成AIを使ってしまい、(すぐ終わると思ってたから)余計に混乱してしまった。(概ね2-3hも浪費した、勿体無い、、、)
そこで、複雑な経緯を紐解くべく我々はNeovimにおけるLSP導入方法の経緯の奥地へと向かった。。。
経緯は概ね以下の感じだった。
- nvim v0.5 LSP組込なし、プラグイン
- nvim v0.5-0.10 組込あり、nvim-lspconfigに依存
- nvim v0.11-(最近) nvim-lspconfigの依存不要
元々はプラグインを使わないとLSPを設定できなかった(そりゃそうか)ところから 最近ではプラグインを導入せずともvimのAPIとして提供されるようになった。 体験者ではないけど便利になったと思う、最高!
3の手法で記載して、LSP自体をインストールしたらすぐ動いた。goplsを入れてみたら、本当にすぐ終わった。 合わせて細かいプロパティはClaude Codeと一緒に作成したので人間の作業時間は実質10分とか。(経緯の調査時間は除く)
今回のことから、複雑かつ知らないこと(私にとって曖昧性の高いこと)は経緯を紐解くと良かった。
Neovimのように設定が多い場合はdotfilesが大活躍する
LSP含めて色々設定した。(参考にしたのは kawarimidollさんのZenn本「Neovimをはじめよう feat. mini.nvim」) すると、設定ファイルが長くなってきたので分割したくなったりする。で、分割すると ファイル数が増えて、1個ずつは保守性が上がるものの、管理コスト(主にPC移行時に辛くなる)が大きくて、あら大変。
ここで、「dotfilesって聞いたことあるな、確かVimmerの人たちが作っている自分専用の設定ファイル集?だったか、、、」と
思い出し、これだ!!ってなった。
GitHubリポジトリでdotfilesを入れておくと、GitHub上で設定が保存できるので
PC移行時などで大活躍。(会社のPCに設定入れる時とか同期したい時とかも使えるよね)
そこで、dotfilesを作ってみました。
https://github.com/rin2yh/dotfiles
最高。
ただ、ここで課題が1個あって、設定ファイルをどうやってNeovimとかに同期するか。 それが次の話題。
dotfilesではシンボリックリンクが便利すぎてやばい
これは控えめに言って、とてつもなく脳汁が出た。今までハードリンクとかシンボリックリンクとか知識としては持ってた。 でも、正直使うことなくて、知識を腐らせてた。でも、今回dotfilesを作る中で、水を得た魚のようにシンボリックリンクが大活躍した。
さっきの課題の通り、同期させるのに便利。厳密には同期じゃなくて、ショートカットのようなものをつくっている。 プログラミングで近いものだと、ポインタとかかな?のイメージ。
まだ知識レベルは低いので、一旦以下を参考文献として掲載しておく。
https://envader.plus/course/16/scenario/1025
これを使うと、dotfilesフォルダ内で変更した設定とかをNeovimやGhostty、zshにも反映できて超便利だった。 シンボリックリンクを貼る(というのかな?)スクリプトとか用意するともっと便利。脳汁やばい。
GoってLSPもすごい?
これは本当になんとなくの話で、仕組みまではわかってないけど、すごいんじゃないかと思った話。 TSのLSPを入れると、プロジェクト毎にnode_modulesの位置が違って、tsserver.pathが見つからないZE⭐️なエラーが出る。
一方で、GoのLSP(gopls)では全然出なかった。あくまで推測に過ぎないけど Goは言語的に後方互換性があって、かなり古いバージョンでも全然いけることがある。(外部ライブラリやごく稀な破壊的変更は除く) それ由来でTSのLSPのようなエラーが出なかったのではなかろうか。
後で調べる予定だけど、そんな気がしている。
最後に
Neovimの環境構築にざっと2日くらいかかった。でも、これだけ学びがある上で 編集速度が上がるなら最高だよねって思った。
これからVim使い倒すぞ〜〜〜!!(まだバッファの理解もできていないし、操作も覚えきれてない👼)