require('gitsigns').setup { 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 -- map leader gj to go to next hunk map('n', 'gj', function() if vim.wo.diff then return ']c' end vim.schedule(function() gs.next_hunk() end) return '' end, { expr = true }) -- map leader gk to go to previous hunk map('n', 'gk', function() if vim.wo.diff then return '[c' end vim.schedule(function() gs.prev_hunk() end) return '' end, { expr = true }) map('n', 'gp', gs.preview_hunk) map('n', 'gs', gs.stage_hunk) map('v', 'gs', function() gs.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end) map('n', 'gu', gs.reset_hunk) -- nnoremap glf :!smerge log % map('n', 'glf', function() vim.fn.system('smerge log ' .. vim.fn.expand('%')) end) -- nnoremap gbf :!smerge blame % line('.') map('n', 'gbf', function() vim.fn.system('smerge blame ' .. vim.fn.expand('%') .. ' ' .. vim.fn.line('.')) end) end }