git.lua
1 --- Gitsigns: \\g prefix, signs, blame, hunks. Customizations from original Lazy spec. 2 return { 3 specs = { 4 { src = 'https://github.com/lewis6991/gitsigns.nvim', name = 'gitsigns.nvim' }, 5 }, 6 config = function() 7 local gitsigns = require('gitsigns') 8 if type(gitsigns) ~= 'table' or not gitsigns.setup then 9 return 10 end 11 gitsigns.setup({ 12 current_line_blame = true, 13 signs = { 14 add = { text = '┃' }, 15 change = { text = '┃' }, 16 delete = { text = '┃' }, 17 topdelete = { text = '‾' }, 18 changedelete = { text = '~' }, 19 untracked = { text = '┆' }, 20 }, 21 signs_staged = { 22 add = { text = '┃' }, 23 change = { text = '┃' }, 24 delete = { text = '_' }, 25 topdelete = { text = '‾' }, 26 changedelete = { text = '~' }, 27 untracked = { text = '┆' }, 28 }, 29 signs_staged_enable = true, 30 signcolumn = true, 31 numhl = false, 32 linehl = false, 33 word_diff = false, 34 watch_gitdir = { follow_files = true }, 35 on_attach = function(bufnr) 36 local function map(mode, l, r, opts) 37 opts = opts or {} 38 opts.buffer = bufnr 39 vim.keymap.set(mode, l, r, opts) 40 end 41 map('n', ']c', function() 42 if vim.wo.diff then 43 vim.cmd.normal({ ']c', bang = true }) 44 else 45 gitsigns.nav_hunk('next') 46 end 47 end, { desc = 'Next hunk' }) 48 map('n', '[c', function() 49 if vim.wo.diff then 50 vim.cmd.normal({ '[c', bang = true }) 51 else 52 gitsigns.nav_hunk('prev') 53 end 54 end, { desc = 'Previous hunk' }) 55 map('n', '\\gs', gitsigns.stage_hunk, { desc = 'stage hunk' }) 56 map('n', '\\gr', gitsigns.reset_hunk, { desc = 'reset hunk' }) 57 map('v', '\\gs', function() 58 gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) 59 end, { desc = 'stage hunk' }) 60 map('v', '\\gr', function() 61 gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) 62 end, { desc = 'reset hunk' }) 63 map('n', '\\gS', gitsigns.stage_buffer, { desc = 'stage buffer' }) 64 map('n', '\\gu', gitsigns.stage_hunk, { desc = 'stage hunk' }) 65 map('n', '\\gR', gitsigns.reset_buffer, { desc = 'reset buffer' }) 66 map('n', '\\gp', gitsigns.preview_hunk, { desc = 'preview hunk' }) 67 map('n', '\\gP', gitsigns.preview_hunk_inline, { desc = 'review hunk inline' }) 68 map('n', '\\gb', function() 69 gitsigns.blame_line({ full = true }) 70 end, { desc = 'git blame line' }) 71 map('n', '\\gtb', gitsigns.toggle_current_line_blame, { desc = 'toggle line blame' }) 72 map('n', '\\gd', gitsigns.diffthis, { desc = 'diff this' }) 73 map('n', '\\gD', function() 74 gitsigns.diffthis('~') 75 end, { desc = 'Diff this and stage changes' }) 76 map('n', '\\gtd', gitsigns.toggle_deleted, { desc = 'toggle deleted' }) 77 map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', { desc = 'Select hunk' }) 78 end, 79 }) 80 end, 81 }