|
| 1 | +-- Adds git related signs to the gutter, as well as utilities for managing changes |
| 2 | +-- NOTE: gitsigns is already included in init.lua but contains only the base |
| 3 | +-- config. This will add also the recommended keymaps. |
| 4 | + |
| 5 | +return { |
| 6 | + { |
| 7 | + 'lewis6991/gitsigns.nvim', |
| 8 | + opts = { |
| 9 | + on_attach = function(bufnr) |
| 10 | + local gitsigns = require 'gitsigns' |
| 11 | + |
| 12 | + local function map(mode, l, r, opts) |
| 13 | + opts = opts or {} |
| 14 | + opts.buffer = bufnr |
| 15 | + vim.keymap.set(mode, l, r, opts) |
| 16 | + end |
| 17 | + |
| 18 | + -- Navigation |
| 19 | + map('n', ']c', function() |
| 20 | + if vim.wo.diff then |
| 21 | + vim.cmd.normal { ']c', bang = true } |
| 22 | + else |
| 23 | + gitsigns.nav_hunk 'next' |
| 24 | + end |
| 25 | + end, { desc = 'Jump to next git [c]hange ' }) |
| 26 | + |
| 27 | + map('n', ']c', function() |
| 28 | + if vim.wo.diff then |
| 29 | + vim.cmd.normal { ']c', bang = true } |
| 30 | + else |
| 31 | + gitsigns.nav_hunk 'next' |
| 32 | + end |
| 33 | + end, { desc = 'Jump to next git [c]hange ' }) |
| 34 | + |
| 35 | + -- Actions |
| 36 | + -- visual mode |
| 37 | + map('v', '<leader>hs', function() |
| 38 | + gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } |
| 39 | + end, { desc = 'git [s]tage hunk' }) |
| 40 | + map('v', '<leader>hr', function() |
| 41 | + gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } |
| 42 | + end, { desc = 'git [r]eset hunk' }) |
| 43 | + -- normal mode |
| 44 | + map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) |
| 45 | + map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' }) |
| 46 | + map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' }) |
| 47 | + map('n', '<leader>hu', gitsigns.stage_hunk, { desc = 'git [u]ndo stage hunk' }) |
| 48 | + map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' }) |
| 49 | + map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' }) |
| 50 | + map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' }) |
| 51 | + map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' }) |
| 52 | + map('n', '<leader>hD', function() |
| 53 | + gitsigns.diffthis '@' |
| 54 | + end, { desc = 'git [D]iff against last commit' }) |
| 55 | + -- Toggles |
| 56 | + map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' }) |
| 57 | + map('n', '<leader>tD', gitsigns.preview_hunk_inline, { desc = '[T]oggle git show [D]eleted' }) |
| 58 | + end, |
| 59 | + }, |
| 60 | + }, |
| 61 | +} |
0 commit comments