From 2100dde7ca03a3482426a76db04d3c3af4a89009 Mon Sep 17 00:00:00 2001 From: Luna Komorebi Date: Fri, 30 Aug 2024 13:49:12 +0200 Subject: [PATCH] add git shortcuts for nvim --- config/nvim/init.lua | 60 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/config/nvim/init.lua b/config/nvim/init.lua index c823b97..835fda6 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -167,6 +167,66 @@ require("lazy").setup({ topdelete = { text = "‾" }, changedelete = { text = "~" }, }, + 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 + + -- Navigation + map({ "n", "v" }, "]c", function() + if vim.wo.diff then + return "]c" + end + vim.schedule(function() + gs.next_hunk() + end) + return "" + end, { expr = true, desc = "Jump to next hunk" }) + + map({ "n", "v" }, "[c", function() + if vim.wo.diff then + return "[c" + end + vim.schedule(function() + gs.prev_hunk() + end) + return "" + end, { expr = true, desc = "Jump to previous hunk" }) + + -- Actions + -- visual mode + map("v", "hs", function() + gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, { desc = "stage git hunk" }) + map("v", "hr", function() + gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, { desc = "reset git hunk" }) + -- normal mode + map("n", "hs", gs.stage_hunk, { desc = "git stage hunk" }) + map("n", "hr", gs.reset_hunk, { desc = "git reset hunk" }) + map("n", "hS", gs.stage_buffer, { desc = "git Stage buffer" }) + map("n", "hu", gs.undo_stage_hunk, { desc = "undo stage hunk" }) + map("n", "hR", gs.reset_buffer, { desc = "git Reset buffer" }) + map("n", "hp", gs.preview_hunk, { desc = "preview git hunk" }) + map("n", "hb", function() + gs.blame_line({ full = false }) + end, { desc = "git blame line" }) + map("n", "hd", gs.diffthis, { desc = "git diff against index" }) + map("n", "hD", function() + gs.diffthis("~") + end, { desc = "git diff against last commit" }) + + -- Toggles + map("n", "tb", gs.toggle_current_line_blame, { desc = "toggle git blame line" }) + map("n", "td", gs.toggle_deleted, { desc = "toggle git show deleted" }) + + -- Text object + map({ "o", "x" }, "ih", ":Gitsigns select_hunk", { desc = "select git hunk" }) + end, }, },