症状

Neovimでnvim-treesitterを導入したが、シンタックスハイライトが表示されない、または一部の言語でハイライトが効かない。

結論:まずこれを確認

  1. :TSInstall {言語名} でパーサーがインストールされているか確認
  2. :TSModuleInfo でhighlightモジュールが有効か確認
  3. :checkhealth nvim-treesitter でエラーがないか確認

操作フロー

    flowchart TD
    A[ハイライトが効かない] --> B{:TSInstallInfo で<br>パーサー確認}
    B -->|未インストール| C[:TSInstall 言語名]
    B -->|インストール済| D{:TSModuleInfo で<br>highlight確認}
    D -->|false| E[init.luaで<br>highlight有効化]
    D -->|true| F{:checkhealth<br>nvim-treesitter}
    F -->|エラーあり| G[エラー内容に従い対処]
    F -->|エラーなし| H[vim.cmd構文<br>競合を確認]
    C --> I[再起動して確認]
    E --> I
    G --> I
    H --> J[syntax offを確認]
  

よくある原因

  • パーサー未インストール - 言語ごとのパーサーを個別にインストールする必要がある
  • highlightモジュールが無効 - 設定でtreesitter highlightを有効化していない
  • Neovimのバージョンが古い - nvim-treesitterは最新のNeovimを要求する
  • 従来のsyntax highlightとの競合 - syntax on が残っていると競合する場合がある
  • パーサーのビルドエラー - C コンパイラがないとパーサーがビルドできない
  • プラグインマネージャの読み込み順 - treesitterの設定が読み込まれていない
  • filetype未検出 - ファイルタイプが正しく認識されていない

操作手順

ステップ1: パーサーのインストール状態を確認する

Neovimを起動し、以下を実行する。

    :TSInstallInfo
  

🔍 チェックポイント: 対象言語の横に [✓] が表示されていればインストール済み

未インストールの場合:

    :TSInstall python
:TSInstall lua
:TSInstall javascript
  

ステップ2: highlightモジュールの有効状態を確認する

    :TSModuleInfo
  

🔍 チェックポイント: highlight の行が対象ファイルタイプで true になっているか確認

ステップ3: init.luaの設定を確認する

設定ファイル ~/.config/nvim/init.lua を開き、以下の設定があるか確認する。

    require('nvim-treesitter.configs').setup {
  ensure_installed = { "lua", "python", "javascript" },
  highlight = {
    enable = true,
    additional_vim_regex_highlighting = false,
  },
}
  

🔍 チェックポイント: highlight = { enable = true } が設定されているか

ステップ4: checkhealthを実行する

    :checkhealth nvim-treesitter
  

🔍 チェックポイント: ERRORWARNING が表示されていないか確認

よくあるエラーと対処:

エラー内容 対処
No C compiler found gcc または clang をインストール
Neovim version too old Neovim 0.9.0 以上にアップデート
Parser not found :TSInstall {言語} を実行

ステップ5: 従来のsyntax設定を確認する

~/.config/nvim/init.lua に以下が残っていないか確認する。

    -- 以下は削除または無効化する
vim.cmd('syntax on')
vim.cmd('syntax enable')
  

treesitter使用時は不要:

    -- treesitterが有効なら以下で十分
vim.cmd('syntax off')
  

🔍 チェックポイント: :set syntax?syntax= (空)または syntax=off ならOK

ステップ6: filetypeの検出を確認する

    :set filetype?
  

🔍 チェックポイント: 期待するファイルタイプ(python, lua など)が表示されるか

ファイルタイプが filetype= と空の場合:

    -- init.lua に追加
vim.filetype.add({
  extension = {
    mdx = 'markdown',
  },
})
  

NG行動(やってはいけないこと)

  • :TSInstall all を実行する - 不要なパーサーまでインストールされ、起動が遅くなる
  • パーサーを手動でコンパイルする - nvim-treesitterの管理外になり更新できなくなる
  • syntax on と treesitter highlight を両方有効にする - 競合して表示が崩れる場合がある
  • checkhealth のエラーを無視する - 根本的な問題を見逃す

よくある質問(FAQ)

Q1: 特定の言語だけハイライトが効かない場合は?

A: :TSInstall {言語名} でその言語のパーサーをインストールする。:TSInstallInfo で対応言語一覧を確認できる。

Q2: パーサーのインストールが失敗する場合は?

A: Cコンパイラ(gcc/clang)が必要。Ubuntuなら sudo apt install build-essential、macOSなら xcode-select --install を実行する。

Q3: treesitterとLSPのハイライトは競合する?

A: 通常は競合しない。LSPはセマンティックハイライト、treesitterはシンタックスハイライトで役割が異なる。両方有効で問題ない。

関連するトラブル

準備中

解決しない場合

  • 公式ドキュメント: https://github.com/nvim-treesitter/nvim-treesitter
  • :messages でエラーログを確認
  • ~/.local/share/nvim/lazy/nvim-treesitter/ (lazy.nvimの場合)のパーサーディレクトリを削除して再インストール
  • 次に調べるキーワード: nvim-treesitter parser install failed, treesitter highlight not working filetype