Files
git.nvim/README.md
T
2026-05-26 17:01:44 +02:00

76 lines
3.5 KiB
Markdown

# git.nvim
A git workflow integration for Neovim.
Features:
- Status sidebar with stage/unstage/discard actions
- Log viewer
- Diff splits against any revision, the index, or the worktree
- Gutter signs + optional diff overlay
- Per-hunk stage / reset / preview / select
- Blame: cursor-line popup, inline annotation, full-file gutter
- Commit proxy (compose in a Neovim buffer)
- Generic `:G <subcommand>` runner
- `git://<rev>:<path>` URIs (worktree, index, stages, blobs, bare objects)
Requires Neovim v0.12+ and git v2.25+.
## Install
The plugin auto-initializes from its `plugin/git.lua` and exposes `lua/git/`. No `setup()` call is required.
With `vim.pack`:
```lua
vim.pack.add({ "https://git.owall.dev/warg/git.nvim" })
```
## Commands
| Command | Action |
| -------------------------------------------- | ---------------------------------------------- |
| `:G[!] [args...]` | Generic git runner |
| `:Grefresh` | Refresh git status for all repos |
| `:Glog [args...]` | Open the log viewer |
| `:Gdiffsplit [vertical\|horizontal] [<rev>]` | Open a diff split (default vertical, vs index) |
| `:Gedit <rev>[:path]` | Open an object as a buffer (`git://` URI) |
| `:Gstatus [sidebar\|split\|current]` | Open the status view (default `split`) |
| `:GitDiffOverlay` | Toggle the in-buffer diff overlay |
## `<Plug>` mappings
| Plug map | Action |
| --------------------------------------- | ------------------------------------- |
| `<Plug>(git-status-toggle)` | Toggle status sidebar |
| `<Plug>(git-log)` | Open log viewer |
| `<Plug>(git-commit)` | Compose a commit |
| `<Plug>(git-commit-amend)` | Amend the last commit |
| `<Plug>(git-diffsplit-vertical)` | Vertical diff vs index |
| `<Plug>(git-diffsplit-vertical-head)` | Vertical diff vs HEAD |
| `<Plug>(git-diffsplit-horizontal)` | Horizontal diff vs index |
| `<Plug>(git-diffsplit-horizontal-head)` | Horizontal diff vs HEAD |
| `<Plug>(git-blame-popup)` | Cursor-line blame popup |
| `<Plug>(git-blame-view)` | Toggle full-file blame overlay |
| `<Plug>(git-hunk-select)` | Visually select the hunk under cursor |
| `<Plug>(git-hunk-stage-toggle)` | Stage / unstage hunk |
| `<Plug>(git-hunk-reset)` | Reset hunk |
| `<Plug>(git-hunk-overlay-toggle)` | Toggle the in-buffer diff overlay |
| `<Plug>(git-hunk-next)` | Jump to next hunk |
| `<Plug>(git-hunk-prev)` | Jump to previous hunk |
Bind one with e.g.
```lua
vim.keymap.set("n", "<leader>gg", "<Plug>(git-status-toggle)")
```
## Globals
- `vim.g.loaded_git = 1`: skip auto-initialization (set before the plugin loads).
- `vim.g.git_hunk_signs = { add?, change?, delete? }`: override the gutter glyphs (default `┃`).
## Highlight groups
See the `DEFAULT_HIGHLIGHTS` table for the full list.