症状

Neovimでnvim-cmpをインストールしたが、補完候補が表示されない・ポップアップが出ない。

結論:まずこれを確認

  1. :checkhealth nvim-cmp を実行してエラーがないか確認する
  2. 補完ソース(cmp-nvim-lsp, cmp-buffer等)がインストールされているか確認する
  3. 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 以外の表示がないか確認する。ERRORWARNING があれば該当箇所を修正する。

ステップ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」