From ec7f21c81ba0141bfd46a517855a69b98cf26dca Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 7 Dec 2025 21:30:13 +0000 Subject: [PATCH] gitsigns configured --- lazy-lock.json | 1 + lua/plugins/gitsigns.lua | 57 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 lua/plugins/gitsigns.lua 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, + }, +}