diff --git a/init.lua b/init.lua index c40b3b9..f17433a 100644 --- a/init.lua +++ b/init.lua @@ -194,6 +194,7 @@ require("lazy").setup({ on_attach = function(bufnr) local gitsigns = require('gitsigns') + local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr @@ -208,7 +209,6 @@ require("lazy").setup({ gitsigns.nav_hunk('next') end end) - map('n', '[c', function() if vim.wo.diff then vim.cmd.normal({ '[c', bang = true }) @@ -218,22 +218,86 @@ require("lazy").setup({ end) -- Actions - map('n', 'hs', gitsigns.stage_hunk) + local wk = require("which-key") - 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', 'hu', gitsigns.undo_stage_hunk) - 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) + wk.add({ + { + + 'h', + group = "hunks", + mode = "n", + { + { 'hs', gitsigns.stage_hunk, desc = "Stage Hunk" }, + { 'hr', gitsigns.reset_hunk, desc = "Reset Hunk" }, + { + 'hS', + gitsigns.stage_buffer, + desc = "Stage Buffer" + }, + { + 'hu', + gitsigns.undo_stage_hunk, + desc = "Undo Stage Hunk" + }, + { + 'hR', + gitsigns.reset_buffer, + desc = "Reset Buffer" + }, + { + 'hp', + gitsigns.preview_hunk, + desc = "Preview Hunk" + }, + { + 'hb', + function() gitsigns.blame_line { full = true } end, + desc = "Blame line" + }, + { + 'tb', + gitsigns.toggle_current_line_blame, + desc = "Toggle current line blame" + }, + { + 'hd', + gitsigns.diffthis, + desc = "Diff this" + }, + { + 'hD', + function() gitsigns.diffthis('~') end, + desc = "Diff this ~" + }, + { + 'ht', + gitsigns.toggle_deleted, + desc = "Toggle deleted" + }, + }, + }, + { + 'h', + group = "vhunks", + mode = "v", + { + 'hs', + function() + gitsigns.stage_hunk { vim.fn.line('.'), + vim.fn.line('v') } + end, + desc = "Stage Hunk", + }, + { + 'hr', + function() + gitsigns.reset_hunk { vim.fn.line('.'), + vim.fn.line('v') } + end, + desc = "Reset Hunk", + }, + } + }) -- Text object map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk')