📦

【Neovim】爆速で起動するIDE構築の手引き【令和最新版】

に公開

TL;DR

NeovimでIDEのような機能を使えるようにカスタマイズするハンズオンです。中級者〜熟練者の方は起動画面だけでも見ていってください。

はじめに

みなさん、Neovim使っていますか?

最近X(旧Twitter)を見ていると、新たにNeovimを試したり、v0.11から新しくなったLSPの設定方法を共有したりと活発なポストが散見され、同志としては嬉しい限りです。
しかし、中には「VSCodeのような体験を再現するのが難しい!」「頑張って環境構築したけど、起動速度が芳しくない…」という方も少なくないのでは?

今回はそんなNeovim初心者さんに向けて、私が作成した爆速スターターキットSnaxVim を使ったNeovimのIDE化をやっていきたいと思います。

🔗 リポジトリ: https://github.com/SnaxVim/SnaxVim

本記事の主な目的

  • 設定ファイルをNeovim上で編集することで、基本的な操作に慣れる
  • Pythonを教材として、Neovim上でエラーチェック、自動整形、デバッグといったIDE的な機能を有効化する
  • Neovimのプラグインを探し、追加できるようになる

対象読者

  • Neovimに初めて入門される方
  • 以前まで使っていた設定ファイルが壊れてしまった方
  • 爆速で起動するIDEがほしい方

本記事を読んでも分からないこと

  • SnaxVimにおける、Neovimの爆速起動に寄与する技術的な方法[2]

環境構築

想定環境は厄介事の多い皆大好きWindowsです。Linux/macOSの方は適宜読み替えてください。

パッケージマネージャのインストール

はじめに、Scoop(パッケージマネージャ)をインストールしましょう。これにより、scoop install XXXと入力するだけで面倒なインストールやパスの解決をよしなにしてくれます。
Scoop自体のインストール手順については、こちら(外部リンク)をご参照ください。

必須パッケージの追加

事前にScoopをインストールしている場合、以下のように入力することでインストールできます。

scoop install neovim

SnaxVimの準備

過去にNeovimを使ったことがある場合の追加操作

設定ファイルが残っている場合、以下のようにリネームして退避しておきましょう。

move %LOCALAPPDATA%/nvim %LOCALAPPDATA%/nvim-bak
move %LOCALAPPDATA%/nvim-data %LOCALAPPDATA%/nvim-bak-data
move %TMP%/nvim %TMP%/nvim-bak
  1. リポジトリをC:Users\(ユーザ名)\AppData\Local\nvimにクローンします。
git clone https://github.com/SnaxVim/SnaxVim %LOCALAPPDATA%/nvim
  1. リモートブランチを削除/リネームします。
git remote remove origin

NeovimのIDE化(LSP, DAP, Linter, Formatterの有効化)

前準備は完了です。さあ、Neovimを起動しましょう!

nvim

Neovimが起動すると、まずlazy.nvimというプラグインマネージャが発火します。
いくつかのプラグインが自動的にC:Users\(ユーザ名)\AppData\Local\nvim-data\lazyにクローンされるので、しばらく待機します。

lazy.nvimによるプラグインのインストールが正常に終了したら、早速IDE化していきましょう。

LSPの設定

SnaxVimは、設定ファイルの内容をもとに必要なパッケージを自動インストールします。
まずは、LSPを設定してエラーチェックやコード補完を有効化するところから始めましょう。

起動後の画面はこのようになっています。指示に従ってcを押下後、lua\configs\nvim-lspconfig.luaと検索しEnterキーを押下します。

すると、以下のようなテキストが表示されます。コメントの通り、serversテーブル内のアイテムをアンコメントしましょう。
jで下へ、kで上へカーソルを移動し、カーソル列が合わせられたらgccと入力することで、アンコメント/コメントアウトを切り替えられます。

同様に、-- Override the default...以降のコメントもアンコメントします。すぐ下の列にカーソルを合わせ、Vで行選択モードに入り、j/kで特定の範囲を選択できます。
対象範囲まで範囲選択できたら、gcと入力することで、選択した範囲のアンコメント/コメントアウトを切り替えられます。
ここまでできたら、:upと入力後にEnterキーを押下して変更を保存しましょう。

その後:qと入力後にEnterキーを押下することでNeovimを終了できます。

LSPのインストール

次に、mason.nvim経由で先ほど設定したLSPをインストールします。:Masonと入力後にEnterキーを押下してください。

インストールが自動的に開始するため、特に何も触らずにしばらく待ちます。

インストールが完了したら、qでMasonのウィンドウを閉じましょう。

LSPの動作確認

:ed test.pyと入力後にEnterキーを押下して、新規Pythonファイルを編集してみましょう。
例として、iでInsertモードに入り、foo=と入力してEscキーを押下します。

basedpyrightが正常に起動している場合、上記のように怒られるはずです。
正常な挙動が確認できたら、:q!と入力後にEnterキーを押下することで、ファイルを保存せずにNeovimを終了してください。

DAP, Linter, Formatterのインストール

同様にして、起動画面に記載の設定ファイル[4]をそれぞれ開き、指示に従って適切なアイテムをアンコメントします。
その後、Neovimを再起動してmason.nvimを開くことで、同様に自動インストールが始まります。

プラグインの追加による機能拡張

Neovimには様々な方が作成したプラグインが多数存在します。今回は、デバッグ環境の構築を例に、プラグインのインストールとその活用の方法について解説します。

プラグインの探し方

Neovimには、VSCodeにおけるMarketplaceのようなものが存在しません。現状は有志が作成したリストを参照するか、自ら情報収集するしかないようです。

なお、有名なものとしては以下が挙げられます。

Python用デバッグ環境の構築(nvim-dap-pythonのインストール)

Neovimの初回起動時に自動的に導入されたnvim-dapはDAP用のクライアントですが、各言語に応じた設定はユーザ側で書く必要があります。
nvim-dap-xxx という名前のプラグインは設定のベストプラクティスを提供してくれるため、特にこだわりがない場合はそれらを頼りましょう。

Neovimの起動後、先ほどと同様にcを押下し、lua\plugins\example.luaを開いてください。

nvim-dap-pythonについて記載しているブロックを範囲選択・アンコメントし、保存してNeovimを再起動します。

Neovimの起動時、lazy.nvimが発火してnvim-dap-pythonが新たに追加されます。

デバッガの動作確認

先ほどと同様に、:ed fibo.pyと入力後にEnterキーを押下することで、新規のpythonファイルを開きます。
内容はこんな感じで良いでしょう。入力しながらPython用のコード補間が正常に動作することを確認してください。

fibo.py
def fibonacci(n: int, curr: int = 1, prev: int = 0) -> int:
    if n == 0 or n == 1:
        return curr
    else:
        return fibonacci(n - 1, curr + prev, curr)


if __name__ == "__main__":
    val = 10
    print(f"f({val}) = {fibonacci(val)}")

上記の内容を入力し保存したら、F5キーを押下してデバッグを開始します。このとき、F9キーでブレークポイントを貼ることもできます。

なお、SnaxVimではigorlfs/nvim-dap-viewというプラグインにより、デバッグ時に専用のバッファが開きます。分割されたバッファ間を移動したい場合、Ctrl+wに続けて方向キー(h/j/k/l)を入力します[5]
このバッファはコードの走査が完了した際に閉じてしまいますが、F7キーを押下することで直前の出力を再表示できます。

次にやるべきこと

これにてハンズオンは終了です。お疲れ様でした!
まだ気力が残っている方は、以下のようなことも試してみてはいかがでしょうか。

  • lua\configs以下のファイルを覗いてみて、設定の構造を把握する
  • 使いたい言語のLSPを追加で設定・インストールする
  • 好きなプラグインを追加してみる(e.g. gitsigns.nvim, lualine.nvim)

おわりに

猫も杓子もVSCodeな昨今ですが、ターミナル内での生活も意外と悪くないということがわかっていただけたら幸いです。良きNeovimライフを!

🔗 リポジトリ: https://github.com/SnaxVim/SnaxVim
もし気に入っていただけましたら、上記リポジトリに⭐をいただけますと大変励みになります!

脚注
  1. Neovim Distributionのこと。複数のプラグインや設定を組み合わせ、自身の環境にクローンするだけでNeovim上で様々な機能を使えるように調整された一連の設定ファイルを、このように呼ぶ文化がある。なお、kickstart.nvimのように自らDistroでないことを標榜するものもあり、定義には個人差があるようにも思われる。 ↩︎

  2. あまり複雑なことはしていないので、気になる方はソースコードをご参照ください(PR大歓迎です!!)。誠にごめんなさい🙇 ↩︎

  3. mingwでも可 ↩︎

  4. lua\configs\nvim-dap.lua, lua\configs\nvim-lint.lua, lua\configs\conform.lua ↩︎

  5. プリセットではこれらのキーが割り当てられているが、SnaxVimではCtrl+方向キーで同様の動作を実現できる。 ↩︎

Discussion