Neovim のバージョン、更新、故障切り分け
このページの目次
更新は Neovim、LazyVim、プラグイン、parser、言語サーバー、SDK に及ぶ。一度に変えると原因が分からなくなるため、バージョンを記録して層ごとに検証する。
lockfile の範囲
lazy-lock.json はプラグインのコミットを固定する。Neovim 本体、全 Mason ツール、SDK、プロジェクト依存をまとめて固定するものではない。
| 対象 | 保存方法 |
|---|---|
| Lua と extras | 設定リポジトリ |
| プラグイン版 | lazy-lock.json |
| 本体と外部ツール | 環境・パッケージ記録 |
| プロジェクト依存 | 各 lock/toolchain ファイル |
| キャッシュとログ | ツールごとの管理と再生成 |
更新前の基準
編集中のファイルを保存し、設定の未コミット変更を説明できる状態にする。nvim --version と lockfile を保存して、慣れた小さなプロジェクトを選ぶ。
ファイル、検索、定義移動、整形、テスト、入力法、コピーを確認する。Zellij を常用する場合は境界移動も含める。既知の正常状態から更新し、変更説明と :Lazy の対象を読む。
更新後に同じ操作を繰り返す。起動エラーがないだけでは言語機能やキーの正しさを確認できない。
症状ごとの入口
| 症状 | 確認 |
|---|---|
| Lua エラー | messages、スタック、API 変更 |
| キー変化 | verbose nmap、局所マッピング、順序 |
| 一言語だけ失敗 | LSP health、クライアント、実行パス |
| 保存で過剰変更 | ConformInfo、autocmd、整形規則 |
| ダウンロード失敗 | Lazy ログ、DNS、Git、通信 |
| 大ファイルが遅い | parser、診断、Git 装飾、描画の比較 |
ログにはパスやコードを含む場合がある。診断に必要な情報を残し、無関係なデータは公開しない。
最小環境で比較する
ここでも再現するなら端末、入力法、本体を調べる。消えるなら別 NVIM_APPNAME で必要プラグインを順に追加する。日常の設定やデータを削除して切り分けない。
対象設定ディレクトリで Lua を実行せず構文だけ確認する例:
成功はモジュールの存在や API 互換性を保証しない。
空起動の時間を記録する例:
キャッシュと通信で時間は変わるため、一回の速さだけで判断しない。重い段階を見つけてから読み込みイベントを調整する。
正常状態へ戻す
故障した設定とログを保存し、既知の Lua と lockfile を Git から戻す。:Lazy restore で該当コミットを復元し、再起動後に基準操作を行う。
本体や外部サーバーが原因なら、プラグイン復元だけでは戻らない。該当するパッケージ・ツールチェーンの仕組みを使う。data/state/cache の無差別削除は履歴や証拠を失わせる場合がある。
ローカル適合を保守する
公開 opts を優先し、内部関数の上書きには対象コミット、再現条件、上流問題、除去条件を残す。
旧 smart-splits の境界検出回避は、導入済み実装が固定値を返すようになってもローカルに残っていた。更新時は必要性を再確認する。
保守の結果として、検証済み設定と、変えた版・戻し方を説明する短い記録を残す。