vim.keymap.set({ 'n' }, 'uG', "Gitsigns toggle_signs", { desc = 'Gitsigns toggle' }) require('gitsigns').setup({ auto_attach = true, signs_staged_enable = true, signcolumn = true, current_line_blame_opts = { delay = 50 }, on_attach = function(bufnr) local gitsigns = require('gitsigns') local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end -- Actions -- visual mode map('v', 'vs', function() gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'stage git hunk' }) map('v', 'vr', function() gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'reset git hunk' }) -- normal mode map('n', '[v', function() gitsigns.nav_hunk 'prev' end, { desc = 'git previous hunk' }) map('n', ']v', function() gitsigns.nav_hunk 'next' end, { desc = 'git next hunk' }) map('n', 'vs', gitsigns.stage_hunk, { desc = 'git stage hunk' }) map('n', 'vr', gitsigns.reset_hunk, { desc = 'git reset hunk' }) map('n', 'vS', gitsigns.stage_buffer, { desc = 'git stage buffer' }) map('n', 'vu', gitsigns.undo_stage_hunk, { desc = 'git undo stage hunk' }) map('n', 'vR', gitsigns.reset_buffer, { desc = 'git reset buffer' }) map('n', 'vP', gitsigns.preview_hunk, { desc = 'git preview hunk' }) map('n', 'vb', gitsigns.blame_line, { desc = 'git blame line' }) map('n', 'vP', gitsigns.diffthis, { desc = 'git diff against index' }) map('n', 'vD', function() gitsigns.diffthis '@' end, { desc = 'git [D]iff against last commit' }) -- Toggles map('n', 'uvb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' }) map('n', 'uvd', gitsigns.toggle_deleted, { desc = '[T]oggle git show [D]eleted' }) end, })