neovim について
モジュール型Neovim設定の利用と保守を説明するスキルです。lazy.nvimによるプラグイン管理、LSP、デバッグ、パフォーマンスの問題解決を扱い、このLua設定を拡張・診断するユーザー向けです。
主な機能
- 01lazy.nvimによるプラグイン管理を解説
- 02LSPとデバッガーの設定を案内
- 03モジュール構成とsetupパターンを記載
- 04イベント駆動の読み込みと起動プロファイルを説明
- 05プラグイン、キーマップ、一般的な問題への対処を掲載
活用シーン
- 01設定にプラグインやLSPサーバーを追加
- 02プラグインの読み込み、LSP起動、キーマップの問題を診断
- 03起動の遅さやTreesitterエラーを調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill neovimインストール後、Claude Code で/neovimを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/configuration.mddebugging.mdkeybindings.mdlsp.mdmigration-0.11.mdperformance.mdplugin-deepdives.mdplugins.mdtools.mdtroubleshooting.md詳細
Neovim 設定スキル
lazy.nvim を基盤とする、モジュール式でパフォーマンスを最適化した Neovim 設定を扱うための総合ガイドです。
クイックリファレンス
| 指標 | 値 |
|---|---|
| プラグインマネージャー | lazy.nvim |
| プラグインの総数 | 82 |
| 起動時間の目標 | <50ms |
| モジュールパターン | M.setup() |
| リーダーキー | <Space> |
アーキテクチャの概要
~/.config/nvim/
├── init.lua # Entry point
├── lua/
│ ├── config/ # Core configuration (11 modules)
│ │ ├── lazy.lua # Plugin manager bootstrap
│ │ ├── options.lua # Vim options
│ │ ├── keymaps.lua # Key bindings
│ │ ├── autocmds.lua # Autocommands
│ │ └── performance.lua # Startup optimization
│ ├── plugins/specs/ # Plugin specs (9 categories)
│ │ ├── core.lua # Foundation (plenary, nui, devicons)
│ │ ├── ui.lua # UI (lualine, bufferline, noice)
│ │ ├── editor.lua # Editor (autopairs, flash, harpoon)
│ │ ├── lsp.lua # LSP (lspconfig, mason, conform)
│ │ ├── git.lua # Git (fugitive, gitsigns, diffview)
│ │ ├── ai.lua # AI (copilot, ChatGPT)
│ │ ├── debug.lua # DAP (nvim-dap, dap-ui)
│ │ ├── tools.lua # Tools (telescope, neo-tree)
│ │ └── treesitter.lua # Syntax (treesitter, textobjects)
│ ├── kickstart/ # Kickstart-derived modules
│ └── utils/ # Utility functions
└── lazy-lock.json # Plugin version lock
標準モジュールパターン
すべての設定モジュールは M.setup() パターンに従います。
local M = {}
M.setup = function()
-- Configuration logic here
end
return M
プラグイン管理(lazy.nvim)
新しいプラグインの追加
lua/plugins/specs/ 内の適切なカテゴリファイルに追加します。
-- lua/plugins/specs/tools.lua
return {
-- Existing plugins...
{
"author/plugin-name",
event = "VeryLazy", -- Loading strategy
dependencies = { "dep/name" }, -- Required plugins
opts = {
-- Plugin options
},
config = function(_, opts)
require("plugin-name").setup(opts)
end,
},
}
読み込み戦略
| 戦略 | 使用する場面 | 例 |
|---|---|---|
lazy = true | デフォルト。必要に応じて読み込む | ほとんどのプラグイン |
event = "VeryLazy" | UI の読み込み後 | UI の機能強化 |
event = "BufReadPre" | ファイルを開いたとき | Treesitter、gitsigns |
event = "InsertEnter" | 入力を開始したとき | 補完、autopairs |
cmd = "CommandName" | コマンドの実行時 | 重いツール |
ft = "filetype" | 特定のファイルタイプ用 | 言語プラグイン |
keys = {...} | キーを押したとき | モーションプラグイン |
プラグインのコマンド
| コマンド | 説明 |
|---|---|
:Lazy | lazy.nvim のダッシュボードを開く |
:Lazy sync | プラグインを更新してインストールする |
:Lazy profile | 起動時間の分析を表示する |
:Lazy clean | 未使用のプラグインを削除する |
:Lazy health | プラグインの状態を確認する |
LSP 設定
完全な LSP リファレンスについては、references/lsp.md を参照してください。
LSP スタック
mason.nvim (installer)
├── mason-lspconfig.nvim → nvim-lspconfig
├── mason-tool-installer.nvim (auto-install)
└── mason-nvim-dap.nvim → nvim-dap
nvim-lspconfig
├── blink.cmp (completion)
├── conform.nvim (formatting)
├── nvim-lint (linting)
└── trouble.nvim (diagnostics)
LSP サーバーの追加
-- In lua/plugins/specs/lsp.lua, add to mason-tool-installer list:
ensure_installed = {
"lua_ls",
"pyright",
"your_new_server", -- Add here
}
-- Configure in lspconfig setup:
servers = {
your_new_server = {
settings = {
-- Server-specific settings
},
},
}
LSP のキーバインド
| キー | アクション |
|---|---|
gd | 定義へ移動 |
gr | 参照へ移動 |
gI | 実装へ移動 |
gD | 宣言へ移動 |
K | ホバードキュメント |
<leader>rn | シンボル名を変更 |
<leader>ca | コードアクション |
<leader>D | 型定義 |
<leader>ds | ドキュメントシンボル |
<leader>ws | ワークスペースシンボル |
キーバインド
完全なリファレンスについては、references/keybindings.md を参照してください。
基本的なナビゲーション
| キー | アクション |
|---|---|
<C-h/j/k/l> | ウィンドウ間を移動 |
<S-h> / <S-l> | 前/次のバッファ |
<leader>sf | ファイルを検索 |
<leader>sg | grep で検索 |
<leader><space> | バッファを検索 |
\\ | Neo-tree の表示/非表示を切り替え |
キーバインドの追加
-- In lua/config/keymaps.lua M.setup():
vim.keymap.set('n', '<leader>xx', function()
-- Your action
end, { desc = 'Description for which-key' })
-- Or in a plugin spec:
keys = {
{ "<leader>xx", "<cmd>Command<CR>", desc = "Description" },
}
デバッグ(DAP)
完全なリファレンスについては、references/debugging.md を参照してください。
DAP のキーバインド
| キー | アクション |
|---|---|
<F5> | デバッグを続行/開始 |
<F10> | ステップオーバー |
<F11> | ステップイン |
<F12> | ステップアウト |
<leader>b | ブレークポイントの切り替え |
<leader>B | 条件付きブレークポイント |
デバッグアダプターの追加
-- In lua/plugins/specs/debug.lua
local dap = require("dap")
dap.adapters.your_adapter = {
type = "executable",
command = "path/to/adapter",
}
dap.configurations.your_filetype = {
{
type = "your_adapter",
request = "launch",
name = "Launch",
program = "${file}",
},
}
パフォーマンスの最適化
起動最適化のレイヤー
| レイヤー | 手法 | 短縮時間 |
|---|---|---|
| 1 | vim.loader.enable() | 約50ms |
| 2 | vim._defaults をスキップ | 約180ms |
| 3 | プロバイダーを無効化 | 約10ms |
| 4 | 組み込み機能を無効化 | 約20ms |
| 5 | 設定を遅延 | 約30ms |
| 6 | イベントベースの読み込み | 変動 |
起動のプロファイリング
:Lazy profile
遅延読み込みパターン
-- In init.lua
vim.defer_fn(function()
require('config.options').setup()
require('config.keymaps').setup()
require('config.autocmds').setup()
end, 0)
よくあるタスク
Autocommand の追加
-- In lua/config/autocmds.lua M.setup():
vim.api.nvim_create_autocmd("FileType", {
pattern = { "markdown", "text" },
callback = function()
vim.opt_local.wrap = true
vim.opt_local.spell = true
end,
})
Vim オプションの追加
-- In lua/config/options.lua M.setup():
vim.opt.your_option = value
ユーティリティ関数の作成
-- In lua/utils/init.lua
local M = {}
M.your_function = function(args)
-- Implementation
end
return M
-- Usage: require('utils').your_function(args)
プラグインのカテゴリ
コア(4 プラグイン)
plenary.nvim、nui.nvim、nvim-web-devicons、lazy.nvim
UI(11 プラグイン)
tokyonight、alpha-nvim、lualine、bufferline、noice、nvim-notify、which-key、indent-blankline、mini.indentscope、fidget、nvim-scrollbar
エディター(13 プラグイン)
nvim-autopairs、flash.nvim、clever-f、nvim-spectre、grug-far、harpoon、persistence、smartyank、vim-sleuth、vim-illuminate、tabular、todo-comments、toggleterm
LSP(12 プラグイン)
nvim-lspconfig、mason、mason-lspconfig、mason-tool-installer、lazydev、luvit-meta、SchemaStore、conform、nvim-lint、trouble、blink.cmp/nvim-cmp、LuaSnip
Git(7 個のプラグイン)
vim-fugitive、vim-rhubarb、gitsigns、diffview、vim-flog、git-conflict、octo
AI(3 個のプラグイン)
copilot.vim、ChatGPT.nvim、mcphub.nvim
デバッグ(8 個のプラグイン)
nvim-dap、nvim-dap-ui、nvim-dap-virtual-text、nvim-dap-python、nvim-dap-go、mason-nvim-dap、telescope-dap、nvim-nio
ツール(14 個のプラグイン)
telescope、telescope-fzf-native、telescope-ui-select、neo-tree、oil.nvim、nvim-bqf、rest.nvim、vim-dadbod、vim-dadbod-ui、vim-dadbod-completion、iron.nvim、markdown-preview、nvim-puppeteer、obsidian.nvim
Treesitter(3 個のプラグイン)
nvim-treesitter、nvim-treesitter-context、nvim-treesitter-textobjects
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| プラグインが読み込まれない | :Lazy sync |
| LSP が起動しない | :LspInfo、:Mason |
| アイコンが表示されない | Nerd Font をインストールしてください |
| 起動が遅い | :Lazy profile |
| Treesitter のエラー | :TSUpdate |
| キーバインドの競合 | :verbose map <key> |
ヘルスチェック
:checkhealth
デバッグログ
-- Temporarily add to plugin config:
log_level = vim.log.levels.DEBUG,
リソース
参考資料
- references/configuration.md - コア設定オプション
- references/plugins.md - 全 82 個のプラグインの詳細
- references/plugin-deepdives.md - プラグインの詳細ガイド
- references/lsp.md - LSP サーバーの設定
- references/keybindings.md - キーバインドの完全なリファレンス
- references/debugging.md - DAP デバッグガイド
- references/performance.md - 最適化の手法
- references/tools.md - CLI ツール、ユーティリティ、ワークフロー
- references/troubleshooting.md - よくある問題と解決策
- references/migration-0.11.md - Neovim 0.11 への移行ガイド
注意点
- LSP は BufRead ではなく FileType でアタッチされます: プラグイン仕様の評価前に開いたバッファには LSP がアタッチされません。
:LspInfoに何も表示されない場合は、同じファイルタイプの新しいバッファを開くか、:editを実行して自動コマンドを再度実行してください。 lazy-lock.jsonはすべてを暗黙的に固定します: ロックエントリーを削除するか、明示的に:Lazy updateを実行しない限り、:Lazy syncではプラグインは更新されません。sync は、不足しているプラグインのインストールと、不要になったプラグインの削除のみを行います。vim.defer_fn(..., 0)は UIEnter の後、FileType の前に実行されます: この方法で読み込まれた設定では、最初のバッファのファイルタイプイベントを取りこぼします。最初のバッファで連携機能に問題が生じる場合は、キーマップとオプションをdefer_fnの外に移してください。- Mason のインストール先は
$PATHではなく~/.local/share/nvim/mason/bin/です: シェルからフォーマッターやリンターを呼び出す外部ツールは、このパスを明示的に追加しない限り、Mason がインストールしたバイナリを見つけられません。 event = "VeryLazy"は UI の準備が整った後まで遅延します: 起動時の動作を制御するプラグイン(セッション、ダッシュボード、カラースキーム)には、lazy = falseとpriority = 1000を指定してください。VeryLazy では遅すぎます。- Treesitter のパーサーはインストール済みの Neovim ABI に対してコンパイルされます: Neovim のアップグレード後は
:TSUpdateが必須です。実行しないと、明確な原因がわからないまま「Impossible pattern」エラーが発生します。