# diffs.nvim **Syntax highlighting for diffs in Neovim** Enhance vim-fugitive and Neovim's built-in diff mode with language-aware syntax highlighting. ![diffs.nvim preview](https://github.com/user-attachments/assets/fc849310-09c8-4282-8a92-a2edaf8fe2b4) ## Features - Treesitter syntax highlighting in `:Git` diffs and commit views - `:Gdiffsplit` / `:Gvdiffsplit` syntax through diff backgrounds - Background-only diff colors for any `&diff` buffer (`:diffthis`, `vimdiff`) - Vim syntax fallback for languages without a treesitter parser - Hunk header context highlighting (`@@ ... @@ function foo()`) - Configurable debouncing, max lines, and diff prefix concealment ## Requirements - Neovim 0.9.0+ - [vim-fugitive](https://github.com/tpope/vim-fugitive) (optional, for unified diff syntax highlighting) ## Installation Using [lazy.nvim](https://github.com/folke/lazy.nvim): ```lua { 'barrettruth/diffs.nvim', dependencies = { 'tpope/vim-fugitive' }, opts = {}, } ``` ## Documentation ```vim :help diffs.nvim ``` ## Highlight Groups diffs.nvim defines the following highlight groups. All use `default = true`, so colorschemes can override them. | Group | Purpose | | ----------------- | -------------------------------------------------- | | `DiffsAdd` | Background for `+` lines in fugitive unified diffs | | `DiffsDelete` | Background for `-` lines in fugitive unified diffs | | `DiffsAddNr` | Line number highlight for `+` lines | | `DiffsDeleteNr` | Line number highlight for `-` lines | | `DiffsDiffAdd` | Background-only `DiffAdd` for `&diff` windows | | `DiffsDiffDelete` | Background-only `DiffDelete` for `&diff` windows | | `DiffsDiffChange` | Background-only `DiffChange` for `&diff` windows | | `DiffsDiffText` | Background-only `DiffText` for `&diff` windows | By default, these are computed from your colorscheme's `DiffAdd`, `DiffDelete`, `DiffChange`, `DiffText`, and `Normal` groups. To customize, define them in your colorscheme before diffs.nvim loads, or link them to existing groups. ## Known Limitations - 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`. ## Acknowledgements - [vim-fugitive](https://github.com/tpope/vim-fugitive) - [codediff.nvim](https://github.com/esmuellert/codediff.nvim) - [diffview.nvim](https://github.com/sindrets/diffview.nvim)