症状
Neovimでnvim-cmpをインストールしたが、補完候補が表示されない・ポップアップが出ない。
結論:まずこれを確認
:checkhealth nvim-cmpを実行してエラーがないか確認する- 補完ソース(cmp-nvim-lsp, cmp-buffer等)がインストールされているか確認する
sourcesの設定でソースが指定されているか確認する
操作フロー
flowchart TD
A[補完が表示されない] --> B{:checkhealth nvim-cmp}
B -->|エラーあり| C[エラー内容を確認]
B -->|エラーなし| D{補完ソースを確認}
C --> E[プラグインを再インストール]
D -->|ソース未設定| F[sources設定を追加]
D -->|ソース設定済み| G{LSPが起動しているか}
G -->|起動していない| H[:LspInfoで確認]
G -->|起動している| I[キーマッピングを確認]
H --> J[LSP設定を見直す]
I --> K[mapping設定を見直す]
よくある原因
- 補完ソースがインストールされていない - nvim-cmp本体だけでは補完候補が生成されない
- sourcesの設定がない - どのソースから補完するか指定が必要
- LSPが起動していない - cmp-nvim-lspを使う場合、LSPが動いている必要がある
- setup()が呼ばれていない - require(“cmp”).setup() の記述漏れ
- プラグインの読み込み順序が不正 - 依存関係のあるプラグインが先に読み込まれていない
- キーマッピングの競合 - 他のプラグインがTab等のキーを上書きしている
- filetype未検出 - ファイルタイプが検出されずLSPが起動しない
操作手順
ステップ1: checkhealthを実行する
:checkhealth nvim-cmp
🔍 チェックポイント: OK 以外の表示がないか確認する。ERROR や WARNING があれば該当箇所を修正する。
ステップ2: 必要なプラグインがインストールされているか確認する
最低限必要なプラグイン構成:
-- lazy.nvim の例
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp", -- LSP補完ソース
"hrsh7th/cmp-buffer", -- バッファ補完ソース
"hrsh7th/cmp-path", -- パス補完ソース
"L3MON4D3/LuaSnip", -- スニペットエンジン(必須)
"saadparwaiz1/cmp_luasnip", -- スニペット補完ソース
},
}
🔍 チェックポイント: :Lazy で上記プラグインが読み込まれているか確認する。packer.nvimの場合は :PackerStatus を使用する。
ステップ3: setup()が正しく記述されているか確認する
~/.config/nvim/init.lua または ~/.config/nvim/lua/plugins/cmp.lua を確認する:
local cmp = require("cmp")
local luasnip = require("luasnip")
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<Tab>"] = cmp.mapping.select_next_item(),
["<S-Tab>"] = cmp.mapping.select_prev_item(),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
}),
})
🔍 チェックポイント: sources に最低1つのソースが指定されているか確認する。
ステップ4: LSPが起動しているか確認する
:LspInfo
🔍 チェックポイント: 現在のファイルに対応するLSPクライアントが attached と表示されているか確認する。0 client(s) attached の場合はLSPが起動していない。
ステップ5: 手動で補完を呼び出す
" インサートモードで以下を入力
<C-Space>
🔍 チェックポイント: 手動で呼び出して補完が表示されれば、自動補完のトリガー設定を見直す。
ステップ6: エラーメッセージを確認する
:messages
🔍 チェックポイント: nvim-cmp関連のエラーが出力されていないか確認する。
NG行動(やってはいけないこと)
- snippet設定を省略する - nvim-cmpはスニペットエンジンを必須としている
- sourcesを空のままにする - 補完候補の供給元がないと何も表示されない
- 古いプラグインバージョンを混在させる - 依存関係の不整合でエラーが発生する
- :checkhealthの警告を無視する - 多くの場合、ここにヒントがある
よくある質問(FAQ)
Q1: cmp-nvim-lspを入れたがLSP補完が出ない
A: LSPサーバーがインストールされているか確認する。:Mason でインストール状況を確認するか、:LspInfo で接続状態を確認する。
Q2: バッファの単語補完だけ動かしたい
A: sources に { name = "buffer" } のみを指定する。cmp-buffer プラグインがインストールされている必要がある。
Q3: 補完ウィンドウは出るが選択できない
A: mapping 設定を確認する。<Tab> や <CR> のマッピングが正しく設定されているか、他のプラグインと競合していないか確認する。
関連するトラブル
準備中
解決しない場合
- nvim-cmp公式README
- nvim-cmp Wiki
- 確認すべきログ:
:messages、:LspLog - 次に調べるキーワード: 「nvim-cmp sources not working」「nvim-cmp lsp completion」