Syntax highlighting for diffs in Neovim
Enhance vim-fugitive and Neovim's built-in diff mode with language-aware
syntax highlighting.
:Git diffs and commit viewsdiff --git, index, ---, +++):Gdiffsplit / :Gvdiffsplit syntax through diff backgrounds:Gdiff unified diff against any git revision with syntax highlightingdu/dU) for unified diffs&diff buffer (:diffthis, vimdiff)@@ ... @@ function foo())Install with your package manager of choice or via luarocks:
luarocks install diffs.nvim
:help diffs.nvim
Incomplete syntax context: Treesitter parses each diff hunk in isolation
without surrounding code context. When a hunk shows lines added to an existing
block (e.g., adding a plugin inside return { ... }), the parser doesn't see
the return statement and may produce incorrect highlighting. This is
inherent to parsing code fragments—no diff tooling solves this without
significant complexity.
Syntax flashing: diffs.nvim hooks into the FileType fugitive event
triggered by vim-fugitive, at which point the buffer is preliminarily
painted. The buffer is then re-painted after debounce_ms milliseconds,
causing an unavoidable visual "flash" even when debounce_ms = 0.
Conflicting diff plugins: diffs.nvim may not interact well with other
plugins that modify diff highlighting. Known plugins that may conflict:
diffview.nvim - provides its
own diff highlighting and conflict resolution UImini.diff - visualizes buffer
differences with its own highlighting systemgitsigns.nvim - generally
compatible, but both plugins modifying line highlights may produce
unexpected resultsgit-conflict.nvim -
conflict marker highlighting may overlap with diffs.nvimvim-fugitivecodediff.nvimdiffview.nvimdifftasticmini.diffgitsigns.nvimgit-conflict.nvim