From d1e7d5687c112d73a7d04e6a94744b80583a4399 Mon Sep 17 00:00:00 2001 From: Mora Unie Youer Date: Sat, 29 Mar 2025 16:47:56 +0300 Subject: feat: use `gitsigns.nvim` instead of `mini.diff` --- lua/config/plugins/git.lua | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 lua/config/plugins/git.lua (limited to 'lua/config/plugins/git.lua') diff --git a/lua/config/plugins/git.lua b/lua/config/plugins/git.lua new file mode 100644 index 0000000..027aa83 --- /dev/null +++ b/lua/config/plugins/git.lua @@ -0,0 +1,50 @@ +return { + { + -- NOTE: we could use mini.diff, but it doesn't show staged hunks + "gitsigns.nvim", + event = "DeferredUIEnter", + after = function(_) + local gs = require("gitsigns") + + gs.setup({ + on_attach = function(bufnr) + + local function map(mode, l, r, desc, opts) + opts = opts or {} + opts.desc = desc + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + map("n", "[h", function() + if vim.wo.diff then + vim.cmd.normal({"[c", bang = true}) + else + gs.nav_hunk("prev") + end + end, "Prev hunk") + + map("n", "]h", function() + if vim.wo.diff then + vim.cmd.normal({"]c", bang = true}) + else + gs.nav_hunk("next") + end + end, "Next hunk") + + map("n", "]H", function() gs.nav_hunk("first") end, "First hunk") + map("n", "]H", function() gs.nav_hunk("last") end, "Last hunk") + + map("n", "ghs", gs.stage_hunk, "Stage hunk") + map("n", "ghr", gs.reset_hunk, "Reset hunk") + map("n", "ghS", gs.stage_buffer, "Stage buffer") + map("n", "ghR", gs.reset_buffer, "Reset buffer") + map("n", "ghu", gs.undo_stage_hunk, "Undo stage hunk") + + -- NOTE: if using here, we don't get full hunk in selection + map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "Hunk") + end + }) + end + } +} -- cgit v1.2.3-70-g09d2