Syntax highlighting for diffs in Neovim
Enhance vim-fugitive and Neovim's built-in diff mode with language-aware
syntax highlighting.
- Treesitter syntax highlighting in
:Gitdiffs and commit views - Diff header highlighting (
diff --git,index,---,+++) :Gdiffsplit/:Gvdiffsplitsyntax through diff backgrounds:Gdiffunified diff against any git revision with syntax highlighting- Fugitive status buffer keymaps (
du/dU) for unified diffs - Background-only diff colors for any
&diffbuffer (:diffthis,vimdiff) - Vim syntax fallback for languages without a treesitter parser
- Hunk header context highlighting (
@@ ... @@ function foo()) - Character-level (intra-line) diff highlighting for changed characters
- Configurable debouncing, max lines, diff prefix concealment, blend alpha, and highlight overrides
- Neovim 0.9.0+
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. To improve accuracy,
diffs.nvimreads lines from disk before and after each hunk for parsing context (highlights.context, enabled by default with 25 lines). This resolves most boundary issues. Sethighlights.context.enabled = falseto disable. -
Syntax flashing:
diffs.nvimhooks into theFileType fugitiveevent triggered byvim-fugitive, at which point the buffer is preliminarily painted. The buffer is then re-painted afterdebounce_msmilliseconds, causing an unavoidable visual "flash" even whendebounce_ms = 0. -
Conflicting diff plugins:
diffs.nvimmay 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 withdiffs.nvim
vim-fugitivecodediff.nvimdiffview.nvimdifftasticmini.diffgitsigns.nvimgit-conflict.nvim- @phanen - diff header highlighting, unknown filetype fix, shebang/modeline detection, treesitter injection support
