require("gitsigns").setup { sign_priority = 8, on_attach = function(bufnr) local gitsigns = 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", "]c", function() if vim.wo.diff then vim.cmd.normal { "]c", bang = true } else gitsigns.nav_hunk("next") end end) map("n", "[c", function() if vim.wo.diff then vim.cmd.normal { "[c", bang = true } else gitsigns.nav_hunk("prev") end end) -- Actions map("n", "hs", gitsigns.stage_hunk) map("n", "hu", gitsigns.undo_stage_hunk) map("n", "hr", gitsigns.reset_hunk) map("v", "hs", function() gitsigns.stage_hunk { vim.fn.line("."), vim.fn.line("v") } end) map("v", "hr", function() gitsigns.reset_hunk { vim.fn.line("."), vim.fn.line("v") } end) map("n", "hS", gitsigns.stage_buffer) map("n", "hR", gitsigns.reset_buffer) map("n", "hp", gitsigns.preview_hunk) map("n", "hb", function() gitsigns.blame_line { full = true } end) map("n", "tb", gitsigns.toggle_current_line_blame) map("n", "hd", gitsigns.diffthis) map("n", "hD", function() gitsigns.diffthis("~") end) map("n", "td", gitsigns.toggle_deleted) -- Text object map({ "o", "x" }, "ih", gitsigns.select_hunk) end, }