vim.pack.add({ 'https://github.com/lewis6991/gitsigns.nvim', }) local opts = { on_attach = function(bufnr) local keymap = require('utils.keymap') local mapopts = keymap.new_opts local gs = require('gitsigns') keymap.nmap({ { ']c', function() if vim.wo.diff then vim.cmd.normal({ ']c', bang = true }) else gs.nav_hunk('next') end end, mapopts(bufnr), }, { '[c', function() if vim.wo.diff then vim.cmd.normal({ '[c', bang = true }) else gs.nav_hunk('prev') end end, mapopts(bufnr), }, -- stylua: ignore start { 'ep', gs.preview_hunk, mapopts(bufnr, 'Gitsigns: Preview hunk') }, { 'ei', gs.preview_hunk_inline, mapopts(bufnr, 'Gitsigns: Preview hunk(inline)') }, { 'ec', gs.toggle_current_line_blame, mapopts(bufnr, 'Gitsigns: Blame current line') }, { 'eb', function() gs.blame_line({ full = true }) end, mapopts(bufnr, 'Gitsigns: Blame line'), }, { 'ed', gs.diffthis, mapopts(bufnr, 'Gitsigns: Diff against current index') }, { 'eq', gs.setqflist, mapopts(bufnr, 'Gitsigns: Populate quickfixlist with hunks of current buffer') }, { 'eQ', function() gs.setqflist('all') end, mapopts(bufnr, 'Gitsigns: Populate quickfixlist with all hunks of current repo') }, { 'er', gs.reset_hunk, mapopts(bufnr, 'Gitsigns: Reset hunk') }, { 'eR', gs.reset_buffer, mapopts(bufnr, 'Gitsigns: Reset buffer') }, -- stylua: ignore end }) keymap.xmap({ 'ih', gs.select_hunk, mapopts(bufnr) }) end, } require('gitsigns').setup(opts)