docs: restructure vimdoc with integrations parent section

Problem: integration docs (fugitive, neogit, gitsigns) were scattered
as top-level sections with no grouping, making it hard to find all
supported plugin integrations in one place.

Solution: add `|diffs-integrations|` parent section that groups all
integration subsections under a single TOC entry.
This commit is contained in:
Barrett Ruth 2026-03-06 11:17:34 -05:00
parent b2fb49d48b
commit 77a9ca32ca
Signed by: barrett
GPG key ID: A6C96C9349D2FC81

View file

@ -6,22 +6,27 @@ License: MIT
============================================================================== ==============================================================================
INTRODUCTION *diffs.nvim* INTRODUCTION *diffs.nvim*
diffs.nvim adds syntax highlighting to diff views. It overlays language-aware diffs.nvim adds language-aware syntax highlighting to unified diff content
highlights on top of default diff highlighting in vim-fugitive, Neogit, and in Neovim buffers. It replaces flat `diffAdded`/`diffRemoved` coloring with
Neovim's built-in diff mode. treesitter syntax, blended line backgrounds, and character-level intra-line
diffs.
With no configuration, diffs.nvim provides:
- `gitcommit` diff highlighting (e.g., `git commit --verbose`)
- Inline merge conflict detection, highlighting, and resolution
- Background-only diff colors for `&diff` buffers (vimdiff, diffthis)
All other integrations are opt-in. See |diffs-integrations|.
Features: ~ Features: ~
- Syntax highlighting in |:Git| summary diffs and commit detail views - Treesitter syntax highlighting in diff hunks
- Diff header highlighting (`diff --git`, `index`, `---`, `+++`) - Character-level intra-line diff highlighting
- Syntax highlighting in |:Gdiffsplit| / |:Gvdiffsplit| side-by-side diffs
- |:Gdiff| command for unified diff against any git revision
- gitsigns.nvim blame popup highlighting (see |diffs-gitsigns|)
- Background-only diff colors for any `&diff` buffer (vimdiff, diffthis, etc.)
- Vim syntax fallback for languages without a treesitter parser - Vim syntax fallback for languages without a treesitter parser
- Blended diff background colors that preserve syntax visibility - Blended diff background colors that preserve syntax visibility
- Optional diff prefix (`+`/`-`/` `) concealment - Optional diff prefix (`+`/`-`/` `) concealment
- Gutter (line number) highlighting - Gutter (line number) highlighting
- Inline merge conflict marker detection, highlighting, and resolution - |:Gdiff| unified diff against any revision
- Email quoting/patch syntax support (`> diff ...`)
============================================================================== ==============================================================================
CONTENTS *diffs-contents* CONTENTS *diffs-contents*
@ -32,43 +37,40 @@ CONTENTS *diffs-contents*
4. Configuration ............................................ |diffs-config| 4. Configuration ............................................ |diffs-config|
5. Commands ............................................... |diffs-commands| 5. Commands ............................................... |diffs-commands|
6. Mappings ............................................... |diffs-mappings| 6. Mappings ............................................... |diffs-mappings|
7. Fugitive Status Keymaps ................................ |diffs-fugitive| 7. Integrations ..................................... |diffs-integrations|
Fugitive .......................................... |diffs-fugitive|
Neogit .............................................. |diffs-neogit|
Gitsigns .......................................... |diffs-gitsigns|
8. Conflict Resolution .................................... |diffs-conflict| 8. Conflict Resolution .................................... |diffs-conflict|
9. Merge Diff Resolution ..................................... |diffs-merge| 9. Merge Diff Resolution ..................................... |diffs-merge|
10. Neogit ................................................... |diffs-neogit| 10. API ......................................................... |diffs-api|
11. Gitsigns ................................................ |diffs-gitsigns| 11. Implementation ................................... |diffs-implementation|
12. API ......................................................... |diffs-api| 12. Known Limitations ................................... |diffs-limitations|
13. Implementation ................................... |diffs-implementation| 13. Highlight Groups ..................................... |diffs-highlights|
14. Known Limitations ................................... |diffs-limitations| 14. Health Check ............................................. |diffs-health|
15. Highlight Groups ..................................... |diffs-highlights| 15. Acknowledgements ............................... |diffs-acknowledgements|
16. Health Check ............................................. |diffs-health|
17. Acknowledgements ............................... |diffs-acknowledgements|
============================================================================== ==============================================================================
REQUIREMENTS *diffs-requirements* REQUIREMENTS *diffs-requirements*
- Neovim 0.9.0+ - Neovim 0.9.0+
- vim-fugitive (https://github.com/tpope/vim-fugitive) (optional, for unified
diff syntax highlighting in |:Git| and commit views)
- Treesitter parsers for languages you want highlighted - Treesitter parsers for languages you want highlighted
Note: The diff mode feature (background-only colors for |:diffthis|, vimdiff,
etc.) works without vim-fugitive.
============================================================================== ==============================================================================
SETUP *diffs-setup* SETUP *diffs-setup*
Install with lazy.nvim: >lua Install with lazy.nvim: >lua
{ { 'barrettruth/diffs.nvim' }
'barrettruth/diffs.nvim',
dependencies = { 'tpope/vim-fugitive' },
}
< <
The plugin works automatically with no configuration required. For
customization, see |diffs-config|.
NOTE: Load your colorscheme before `diffs.nvim`. For example, with lazy.nvim, Do not lazy load with `event`, `lazy`, `ft`, `config`, or `keys` —
set `priority = 1000` and `lazy = false` on your colorscheme plugin. diffs.nvim lazy-loads itself.
NOTE: Load your colorscheme before diffs.nvim. With lazy.nvim, set
`priority = 1000` and `lazy = false` on your colorscheme plugin.
See |diffs-config| for customization, |diffs-integrations| for plugin
support.
============================================================================== ==============================================================================
CONFIGURATION *diffs-config* CONFIGURATION *diffs-config*
@ -81,6 +83,7 @@ Configuration is done via `vim.g.diffs`. Set this before the plugin loads:
fugitive = false, fugitive = false,
neogit = false, neogit = false,
gitsigns = false, gitsigns = false,
committia = false,
extra_filetypes = {}, extra_filetypes = {},
highlights = { highlights = {
background = true, background = true,
@ -174,6 +177,16 @@ Configuration is done via `vim.g.diffs`. Set this before the plugin loads:
vim.g.diffs = { gitsigns = true } vim.g.diffs = { gitsigns = true }
< <
{committia} (boolean|table, default: false)
Enable committia.vim integration. Pass `true`
or `{}` to enable, `false` to disable. When
active, committia's diff pane (`ft=git`,
buffer name `__committia_diff__`) receives
treesitter syntax, line backgrounds, and
intra-line diffs. >lua
vim.g.diffs = { committia = true }
<
{extra_filetypes} (table, default: {}) {extra_filetypes} (table, default: {})
Additional filetypes to attach to, beyond the Additional filetypes to attach to, beyond the
built-in `git`, `gitcommit`, and any enabled built-in `git`, `gitcommit`, and any enabled
@ -184,6 +197,12 @@ Configuration is done via `vim.g.diffs`. Set this before the plugin loads:
extra_filetypes = { 'diff' }, extra_filetypes = { 'diff' },
} }
< <
Adding `'diff'` also enables highlighting in
picker preview buffers that set `filetype=diff`:
telescope.nvim (git_commits, git_bcommits,
git_status), snacks.nvim (syntax style only),
and fzf-lua (builtin previewer only). Terminal-
based previewers are not supported.
{highlights} (table, default: see below) {highlights} (table, default: see below)
Controls which highlight features are enabled. Controls which highlight features are enabled.
@ -447,10 +466,44 @@ Diff buffer mappings: ~
or the fugitive status keymaps. or the fugitive status keymaps.
============================================================================== ==============================================================================
FUGITIVE STATUS KEYMAPS *diffs-fugitive* INTEGRATIONS *diffs-integrations*
When inside a vim-fugitive |:Git| status buffer, diffs.nvim provides keymaps diffs.nvim integrates with several plugins. There are two attachment
to open unified diffs for files or entire sections. patterns:
Automatic: ~
Enable via config toggles. The plugin registers `FileType` autocmds for
each integration's filetypes and attaches automatically.
>lua
vim.g.diffs = {
fugitive = true,
neogit = true,
gitsigns = true,
}
<
Opt-in: ~
For filetypes not covered by a built-in integration, use `extra_filetypes`
to attach to any buffer whose content looks like a diff.
>lua
vim.g.diffs = { extra_filetypes = { 'diff' } }
<
------------------------------------------------------------------------------
FUGITIVE *diffs-fugitive*
Enable vim-fugitive (https://github.com/tpope/vim-fugitive) support: >lua
vim.g.diffs = { fugitive = true }
<
|:Git| status and commit views receive treesitter syntax, line backgrounds,
and intra-line diffs. |:Gdiff| opens a unified diff against any revision
(see |diffs-commands|).
Fugitive status keymaps: ~
When inside a |:Git| status buffer, diffs.nvim provides keymaps to open
unified diffs for files or entire sections.
Keymaps: ~ Keymaps: ~
*diffs-du* *diffs-dU* *diffs-du* *diffs-dU*
@ -499,6 +552,31 @@ Configuration: ~
Keymap for unified diff in vertical split. Keymap for unified diff in vertical split.
Set to `false` to disable. Set to `false` to disable.
------------------------------------------------------------------------------
NEOGIT *diffs-neogit*
Enable Neogit (https://github.com/NeogitOrg/neogit) support: >lua
vim.g.diffs = { neogit = true }
<
Expanding a diff in a Neogit buffer (e.g., TAB on a file in the status
view) applies treesitter syntax highlighting and intra-line diffs to the
hunk lines.
------------------------------------------------------------------------------
GITSIGNS *diffs-gitsigns*
Enable gitsigns.nvim (https://github.com/lewis6991/gitsigns.nvim) blame
popup highlighting: >lua
vim.g.diffs = { gitsigns = true }
<
`:Gitsigns blame_line full=true` popups receive treesitter syntax, line
backgrounds, and intra-line diffs.
Highlights are applied in a separate `diffs-gitsigns` namespace and do not
interfere with the main decoration provider used for diff buffers.
============================================================================== ==============================================================================
CONFLICT RESOLUTION *diffs-conflict* CONFLICT RESOLUTION *diffs-conflict*
@ -642,52 +720,6 @@ The working file buffer is modified in place; save it when ready.
Phase 1 inline conflict highlights (see |diffs-conflict|) are refreshed Phase 1 inline conflict highlights (see |diffs-conflict|) are refreshed
automatically after each resolution. automatically after each resolution.
==============================================================================
NEOGIT *diffs-neogit*
diffs.nvim works with Neogit (https://github.com/NeogitOrg/neogit) out of
the box. Enable Neogit support in your config: >lua
vim.g.diffs = { neogit = true }
<
When a diff is expanded in a Neogit buffer (e.g., via TAB on a file in the
status view), diffs.nvim applies treesitter syntax highlighting and
intra-line diffs to the hunk lines, just as it does for fugitive.
Neogit highlight overrides: ~
On first attach to a Neogit buffer, diffs.nvim overrides Neogit's diff
highlight groups (`NeogitDiffAdd*`, `NeogitDiffDelete*`,
`NeogitDiffContext*`, `NeogitHunkHeader*`, `NeogitDiffHeader*`, etc.) by
setting them to empty (`{}`). This gives diffs.nvim sole control of diff
line visuals. The overrides are reapplied on `ColorScheme` since Neogit
re-defines its groups then. When `neogit = false`, no highlight overrides
are applied.
==============================================================================
GITSIGNS *diffs-gitsigns*
diffs.nvim can enhance gitsigns.nvim blame popups with syntax highlighting.
Enable gitsigns support in your config: >lua
vim.g.diffs = { gitsigns = true }
<
When `:Gitsigns blame_line full=true` opens a popup, diffs.nvim intercepts
the popup and replaces gitsigns' flat `GitSignsAddPreview`/
`GitSignsDeletePreview` highlights with:
- Treesitter syntax highlighting on the code content
- `DiffsAdd`/`DiffsDelete` line backgrounds
- Character-level intra-line diffs (`DiffsAddText`/`DiffsDeleteText`)
- `@diff.plus`/`@diff.minus` coloring on `+`/`-` prefix characters
The integration patches `gitsigns.popup.create` and `gitsigns.popup.update`
so highlights persist across gitsigns' two-phase render (initial popup, then
update with GitHub/PR data). If gitsigns loads after diffs.nvim, a
`User GitAttach` autocmd retries the setup automatically.
Highlights are applied in a separate `diffs-gitsigns` namespace and do not
interfere with the main decoration provider used for diff buffers.
============================================================================== ==============================================================================
API *diffs-api* API *diffs-api*