From 65d92f035098690ccfbdce9d4d1dbc2ca38628ee Mon Sep 17 00:00:00 2001 From: Henry Denny Date: Wed, 28 Feb 2024 10:06:01 +0000 Subject: [PATCH] Update `gitsigns` config. --- lua/custom/plugins/git.lua | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 lua/custom/plugins/git.lua diff --git a/lua/custom/plugins/git.lua b/lua/custom/plugins/git.lua new file mode 100644 index 00000000..3b7b50da --- /dev/null +++ b/lua/custom/plugins/git.lua @@ -0,0 +1,67 @@ +return { + -- Adds git related signs to the gutter, as well as utilities for managing changes + 'lewis6991/gitsigns.nvim', + opts = { + -- See `:help gitsigns.txt` + 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 + + -- Navigation + map({ 'n', 'v' }, ']h', function() + if vim.wo.diff then + return ']h' + end + vim.schedule(function() + gs.next_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to next hunk' }) + + map({ 'n', 'v' }, '[h', function() + if vim.wo.diff then + return '[h' + end + vim.schedule(function() + gs.prev_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to previous hunk' }) + + -- Actions + -- visual mode + map('v', 'ghs', function() + gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'stage git hunk' }) + map('v', 'ghr', function() + gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'reset git hunk' }) + -- normal mode + map('n', 'ghs', gs.stage_hunk, { desc = 'git stage hunk' }) + map('n', 'ghr', gs.reset_hunk, { desc = 'git reset hunk' }) + map('n', 'gs', gs.stage_buffer, { desc = 'git stage buffer' }) + map('n', 'ghu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) + map('n', 'gr', gs.reset_buffer, { desc = 'git reset buffer' }) + map('n', 'ghp', gs.preview_hunk, { desc = 'preview git hunk' }) + map('n', 'ghb', function() + gs.blame_line { full = false } + end, { desc = 'git blame line' }) + map('n', 'gd', gs.diffthis, { desc = 'git diff against index' }) + map('n', 'gD', function() + gs.diffthis '~' + end, { desc = 'git diff against last commit' }) + + -- Toggles + map('n', 'gtb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) + map('n', 'gtd', gs.toggle_deleted, { desc = 'toggle git show deleted' }) + + -- Text object + map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) + end, + }, +}