From e10cff79d848062ea04c554655c9154ef576b6a4 Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 7 Dec 2025 21:30:13 +0000 Subject: [PATCH] gitsigns configured --- MIGRATION_PLAN.md | 10 +++---- lazy-lock.json | 1 + lua/plugins/gitsigns.lua | 57 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 lua/plugins/gitsigns.lua diff --git a/MIGRATION_PLAN.md b/MIGRATION_PLAN.md index f78d3c9..7b9dee8 100644 --- a/MIGRATION_PLAN.md +++ b/MIGRATION_PLAN.md @@ -233,11 +233,11 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date. - [x] Decision: Skip markdown rendering plugins entirely ## Phase 7.2 — Gitsigns -- [ ] Add `lewis6991/gitsigns.nvim` -- [ ] Configure signs in gutter (add, change, delete, topdelete, changedelete) -- [ ] Add hunk navigation keymaps (]h/[h for next/prev hunk) -- [ ] Add hunk action keymaps (stage, reset, preview) -- [ ] Keep minimal - no inline blame, no advanced features +- [x] Add `lewis6991/gitsigns.nvim` +- [x] Configure signs in gutter (add, change, delete, topdelete, changedelete) +- [x] Add hunk navigation keymaps (]h/[h for next/prev hunk) +- [x] Add hunk action keymaps (stage, reset, preview) +- [x] Keep minimal - no inline blame, no advanced features ## Phase 8 — Copilot diff --git a/lazy-lock.json b/lazy-lock.json index 6cfa4ad..c217699 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -4,6 +4,7 @@ "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, "cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" }, "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, + "gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" }, "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "0b9bb925c000ae649ff7e7149c8cd00031f4b539" }, diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..475af29 --- /dev/null +++ b/lua/plugins/gitsigns.lua @@ -0,0 +1,57 @@ +-- Gitsigns: Git integration with signs in gutter and hunk operations +return { + 'lewis6991/gitsigns.nvim', + event = { 'BufReadPre', 'BufNewFile' }, + opts = { + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, + }, + signcolumn = true, -- Show signs in signcolumn + numhl = false, -- Don't highlight line numbers + linehl = false, -- Don't highlight lines + word_diff = false, -- Don't show word diff + current_line_blame = false, -- No inline blame + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Hunk navigation + map('n', ']h', function() + if vim.wo.diff then return ']c' end + vim.schedule(function() gs.next_hunk() end) + return '' + end, { expr = true, desc = 'Next hunk' }) + + map('n', '[h', function() + if vim.wo.diff then return '[c' end + vim.schedule(function() gs.prev_hunk() end) + return '' + end, { expr = true, desc = 'Previous hunk' }) + + -- Hunk actions + map('n', 'hs', gs.stage_hunk, { desc = 'Stage hunk' }) + map('n', 'hr', gs.reset_hunk, { desc = 'Reset hunk' }) + map('v', 'hs', function() gs.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end, { desc = 'Stage hunk' }) + map('v', 'hr', function() gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end, { desc = 'Reset hunk' }) + map('n', 'hS', gs.stage_buffer, { desc = 'Stage buffer' }) + map('n', 'hu', gs.undo_stage_hunk, { desc = 'Undo stage hunk' }) + map('n', 'hR', gs.reset_buffer, { desc = 'Reset buffer' }) + map('n', 'hp', gs.preview_hunk, { desc = 'Preview hunk' }) + map('n', 'hd', gs.diffthis, { desc = 'Diff this' }) + map('n', 'hD', function() gs.diffthis('~') end, { desc = 'Diff this ~' }) + + -- Text object + map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'Select hunk' }) + end, + }, +}