diff options
author | Damjan 9000 <damjan.9000@gmail.com> | 2023-12-04 16:35:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-04 10:35:54 -0500 |
commit | f8c8b08bc15b2bac590b3c397db3b466f7fb1d0b (patch) | |
tree | 9c044ffde64b2f49585e97a551e59f7e53c664f3 /init.lua | |
parent | 12bd68e8b9bc98242084bce55236d2bf9fe299b1 (diff) |
Add gitsigns recommended keymaps (#531)
* Import gitsigns README.md recommended keymaps (and apply stylua)
the previously added visual mode for ]c [c is kept.
* Add gitsigns keymap descriptions
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 59 |
1 files changed, 51 insertions, 8 deletions
@@ -126,11 +126,16 @@ require('lazy').setup({ changedelete = { text = '~' }, }, on_attach = function(bufnr) - vim.keymap.set('n', '<leader>hp', require('gitsigns').preview_hunk, { buffer = bufnr, desc = 'Preview git hunk' }) - - -- don't override the built-in and fugitive keymaps local gs = package.loaded.gitsigns - vim.keymap.set({ 'n', 'v' }, ']c', function() + + 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 @@ -138,8 +143,9 @@ require('lazy').setup({ gs.next_hunk() end) return '<Ignore>' - end, { expr = true, buffer = bufnr, desc = 'Jump to next hunk' }) - vim.keymap.set({ 'n', 'v' }, '[c', function() + end, { expr = true, desc = 'Jump to next hunk' }) + + map({ 'n', 'v' }, '[c', function() if vim.wo.diff then return '[c' end @@ -147,7 +153,37 @@ require('lazy').setup({ gs.prev_hunk() end) return '<Ignore>' - end, { expr = true, buffer = bufnr, desc = 'Jump to previous hunk' }) + end, { expr = true, desc = 'Jump to previous hunk' }) + + -- Actions + -- visual mode + map('v', '<leader>hs', function() + gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'stage git hunk' }) + map('v', '<leader>hr', function() + gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'reset git hunk' }) + -- normal mode + map('n', '<leader>hs', gs.stage_hunk, { desc = 'git stage hunk' }) + map('n', '<leader>hr', gs.reset_hunk, { desc = 'git reset hunk' }) + map('n', '<leader>hS', gs.stage_buffer, { desc = 'git Stage buffer' }) + map('n', '<leader>hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) + map('n', '<leader>hR', gs.reset_buffer, { desc = 'git Reset buffer' }) + map('n', '<leader>hp', gs.preview_hunk, { desc = 'preview git hunk' }) + map('n', '<leader>hb', function() + gs.blame_line { full = false } + end, { desc = 'git blame line' }) + map('n', '<leader>hd', gs.diffthis, { desc = 'git diff against index' }) + map('n', '<leader>hD', function() + gs.diffthis '~' + end, { desc = 'git diff against last commit' }) + + -- Toggles + map('n', '<leader>tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) + map('n', '<leader>td', gs.toggle_deleted, { desc = 'toggle git show deleted' }) + + -- Text object + map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', { desc = 'select git hunk' }) end, }, }, @@ -491,11 +527,18 @@ require('which-key').register { ['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' }, ['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' }, ['<leader>g'] = { name = '[G]it', _ = 'which_key_ignore' }, - ['<leader>h'] = { name = 'More git', _ = 'which_key_ignore' }, + ['<leader>h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' }, ['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' }, ['<leader>s'] = { name = '[S]earch', _ = 'which_key_ignore' }, + ['<leader>t'] = { name = '[T]oggle', _ = 'which_key_ignore' }, ['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' }, } +-- register which-key VISUAL mode +-- required for visual <leader>hs (hunk stage) to work +require('which-key').register({ + ['<leader>'] = { name = 'VISUAL <leader>' }, + ['<leader>h'] = { 'Git [H]unk' }, +}, { mode = 'v' }) -- mason-lspconfig requires that these setup functions are called in this order -- before setting up the servers. |