diff options
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua index 4b73f2c..19d9049 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua @@ -1,7 +1,7 @@ local utils = require("tobyvin.utils") local M = {} -M.with_selection = function(callback) +M.with_range = function(callback) return function() callback(utils.buffer.get_visual_range()) end @@ -11,30 +11,36 @@ M.show_blameline = function() require("gitsigns").blame_line({ full = true }) end +M.toggle_blameline = function() + require("gitsigns").toggle_current_line_blame() +end + M.on_attach = function(bufnr) local gitsigns = require("gitsigns") - local nmap = utils.keymap.group("n", "<leader>g", { desc = "Git", buffer = bufnr }) - nmap("b", gitsigns.blame_line, { desc = "Show blame" }) - nmap("B", M.show_blameline, { desc = "Show blame" }) - nmap("<C-b>", gitsigns.toggle_current_line_blame, { desc = "Toggle blame line" }) - nmap("j", gitsigns.next_hunk, { desc = "Next Hunk" }) - nmap("k", gitsigns.prev_hunk, { desc = "Prev Hunk" }) - - nmap("p", gitsigns.preview_hunk, { desc = "Preview Hunk" }) - nmap("r", gitsigns.reset_hunk, { desc = "Reset Hunk" }) - nmap("s", gitsigns.stage_hunk, { desc = "Stage Hunk" }) - nmap("u", gitsigns.undo_stage_hunk, { desc = "Undo Stage Hunk" }) - - -- nmap("P", gitsigns.preview_buffer, { desc = "Preview Buffer" }) - nmap("R", gitsigns.reset_buffer, { desc = "Reset Buffer" }) - nmap("S", gitsigns.stage_buffer, { desc = "Stage Buffer" }) - nmap("U", gitsigns.reset_buffer_index, { desc = "Undo Stage Buffer" }) - - local vmap = utils.keymap.group("v", "<leader>g", { desc = "Git", buffer = bufnr }) - vmap("p", M.with_selection(gitsigns.preview_hunk), { desc = "Preview Hunk" }) - vmap("r", M.with_selection(gitsigns.reset_hunk), { desc = "Reset Hunk" }) - vmap("s", M.with_selection(gitsigns.stage_hunk), { desc = "Stage Hunk" }) - vmap("u", M.with_selection(gitsigns.undo_stage_hunk), { desc = "Undo Stage Hunk" }) + utils.keymap.group("n", "<leader>g", { desc = "Git", buffer = bufnr }) + vim.keymap.set("n", "<leader>gb", gitsigns.blame_line, { desc = "Show blame", buffer = bufnr }) + vim.keymap.set("n", "<leader>gB", M.show_blameline, { desc = "Show blame", buffer = bufnr }) + vim.keymap.set("n", "<leader>g<C-b>", M.toggle_blameline, { desc = "Toggle blame", buffer = bufnr }) + vim.keymap.set("n", "<leader>gj", gitsigns.next_hunk, { desc = "Next Hunk", buffer = bufnr }) + vim.keymap.set("n", "<leader>gk", gitsigns.prev_hunk, { desc = "Prev Hunk", buffer = bufnr }) + + vim.keymap.set("n", "<leader>gp", gitsigns.preview_hunk, { desc = "Preview Hunk", buffer = bufnr }) + vim.keymap.set("n", "<leader>gr", gitsigns.reset_hunk, { desc = "Reset Hunk", buffer = bufnr }) + vim.keymap.set("n", "<leader>gs", gitsigns.stage_hunk, { desc = "Stage Hunk", buffer = bufnr }) + vim.keymap.set("n", "<leader>gu", gitsigns.undo_stage_hunk, { desc = "Undo Stage Hunk", buffer = bufnr }) + + -- vim.keymap.set("n", "<leader>gP", gitsigns.preview_buffer, { desc = "Preview Buffer", buffer = bufnr }) + vim.keymap.set("n", "<leader>gR", gitsigns.reset_buffer, { desc = "Reset Buffer", buffer = bufnr }) + vim.keymap.set("n", "<leader>gS", gitsigns.stage_buffer, { desc = "Stage Buffer", buffer = bufnr }) + vim.keymap.set("n", "<leader>gU", gitsigns.reset_buffer_index, { desc = "Undo Stage Buffer", buffer = bufnr }) + + utils.keymap.group("v", "<leader>g", { desc = "Git", buffer = bufnr }) + vim.keymap.set("v", "<leader>gp", M.with_range(gitsigns.preview_hunk), { desc = "Preview Hunk", buffer = bufnr }) + vim.keymap.set("v", "<leader>gr", M.with_range(gitsigns.reset_hunk), { desc = "Reset Hunk", buffer = bufnr }) + vim.keymap.set("v", "<leader>gs", M.with_range(gitsigns.stage_hunk), { desc = "Stage Hunk", buffer = bufnr }) + vim.keymap.set("v", "<leader>gu", M.with_range(gitsigns.undo_stage_hunk), { desc = "Unstage Hunk", buffer = bufnr }) + + vim.api.nvim_exec_autocmds("User", { pattern = "GitAttach", data = { buf = bufnr } }) end M.setup = function() |