No description
Find a file
Barrett Ruth 4a1d4ffb85
Some checks are pending
luarocks / quality (push) Waiting to run
luarocks / publish (push) Blocked by required conditions
Merge pull request #43 from barrettruth/feat/test
more robust testing
2026-02-03 01:29:30 -05:00
.github fix: use yaml, not yml YAML file extension 2026-02-02 22:14:04 -05:00
doc feat: docs update (vim-fugitive is optional) 2026-02-03 01:07:37 -05:00
lua/diffs fix highlights 2026-02-03 01:21:57 -05:00
plugin feat: rename everything 2026-02-02 22:09:13 -05:00
scripts feat(scripts): ci script to run quickly 2026-02-02 16:03:50 -05:00
spec feat(test): misc tests for more robustness 2026-02-03 01:02:38 -05:00
.busted feat(test): testing infrastructure 2026-02-01 23:09:05 -05:00
.editorconfig feat: initial setup files 2026-02-01 16:30:24 -05:00
.gitignore feat: initial setup files 2026-02-01 16:30:24 -05:00
.luarc.json feat: initial setup files 2026-02-01 16:30:24 -05:00
.pre-commit-config.yaml fix: use yaml, not yml YAML file extension 2026-02-02 22:14:04 -05:00
.prettierignore feat: initial setup files 2026-02-01 16:30:24 -05:00
.prettierrc fix: use yaml, not yml YAML file extension 2026-02-02 22:14:04 -05:00
diffs.nvim-scm-1.rockspec feat: rename everything 2026-02-02 22:09:13 -05:00
LICENSE feat: initial setup files 2026-02-01 16:30:24 -05:00
README.md improve screenshot 2026-02-03 01:27:53 -05:00
selene.toml feat: initial setup files 2026-02-01 16:30:24 -05:00
stylua.toml feat: initial setup files 2026-02-01 16:30:24 -05:00
vim.toml cleanup 2026-02-02 14:06:58 -05:00

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

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 (optional, for unified diff syntax highlighting)

Installation

Using lazy.nvim:

{
  'barrettruth/diffs.nvim',
  dependencies = { 'tpope/vim-fugitive' },
  opts = {},
}

Documentation

: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