-- -- Git-related utilities -- vim.keymap.set("n", "gt", "GitGutterLineHighlightsToggle", { desc = "Toggle git line highlighting" }) vim.keymap.set("n", "gg", "GitGutter", { desc = "Refresh GitGutter" }) vim.keymap.set("n", "gq", "GitGutterQuickFix", { desc = "Git hunks to quickfix list" }) vim.keymap.set("n", "gz", "GitGutterFold", { desc = "Fold everything except git diff" }) local function git_blame(file, line) local sys = vim.system({ "bash", "-c", string.format( 'grep -E --only-matching "^author .*$|^summary .*$|^[[:xdigit:]]{40}" <(git blame -L %d,%d --porcelain -- %s)', line, line, file ), }):wait() if sys.stdout then vim.notify(sys.stdout, vim.log.levels.INFO) end if sys.code ~= 0 then local err_msg = "git blame failed (" .. sys.code .. ")\n" .. sys.stderr vim.notify(err_msg, vim.log.levels.ERROR) end end vim.api.nvim_create_user_command("GitBlame", function() git_blame(vim.api.nvim_buf_get_name(0), vim.api.nvim_win_get_cursor(0)[1]) end, { desc = "Show current line git blame" })