From a0fb2283652b8561c932309d37d60cd289aa6b61 Mon Sep 17 00:00:00 2001 From: Damjan 9000 Date: Mon, 7 Sep 2026 19:18:51 +0200 Subject: [PATCH 1/2] gitsigns re-introduce back the map helper so that buf/buffer can be runtime selected --- init.lua | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/init.lua b/init.lua index 99763667213..5fb3f3674db 100644 --- a/init.lua +++ b/init.lua @@ -362,43 +362,49 @@ do }, -- gitsigns.nvim's recommended keymaps: on_attach = function(bufnr) + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + -- Navigation - vim.keymap.set('n', ']c', function() + map('n', ']c', function() if vim.wo.diff then vim.cmd.normal { ']c', bang = true } else gitsigns.nav_hunk 'next' end - end, { desc = 'Jump to next git [c]hange', buf = bufnr }) + end, { desc = 'Jump to next git [c]hange' }) - vim.keymap.set('n', '[c', function() + map('n', '[c', function() if vim.wo.diff then vim.cmd.normal { '[c', bang = true } else gitsigns.nav_hunk 'prev' end - end, { desc = 'Jump to previous git [c]hange', buf = bufnr }) + end, { desc = 'Jump to previous git [c]hange' }) -- Visual mode actions - vim.keymap.set('v', 'hs', function() gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [s]tage hunk', buf = bufnr }) - vim.keymap.set('v', 'hr', function() gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [r]eset hunk', buf = bufnr }) + map('v', 'hs', function() gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [s]tage hunk' }) + map('v', 'hr', function() gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [r]eset hunk' }) -- Normal mode actions - vim.keymap.set('n', 'hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk', buf = bufnr }) - vim.keymap.set('n', 'hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk', buf = bufnr }) - vim.keymap.set('n', 'hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer', buf = bufnr }) - vim.keymap.set('n', 'hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer', buf = bufnr }) - vim.keymap.set('n', 'hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk', buf = bufnr }) - vim.keymap.set('n', 'hi', gitsigns.preview_hunk_inline, { desc = 'git preview hunk [i]nline', buf = bufnr }) - vim.keymap.set('n', 'hb', function() gitsigns.blame_line { full = true } end, { desc = 'git [b]lame line', buf = bufnr }) - vim.keymap.set('n', 'hd', gitsigns.diffthis, { desc = 'git [d]iff against index', buf = bufnr }) - vim.keymap.set('n', 'hD', function() gitsigns.diffthis '~' end, { desc = 'git [D]iff against last commit', buf = bufnr }) - vim.keymap.set('n', 'hQ', function() gitsigns.setqflist 'all' end, { desc = 'git hunk [Q]uickfix list (all files in repo)', buf = bufnr }) - vim.keymap.set('n', 'hq', gitsigns.setqflist, { desc = 'git hunk [q]uickfix list (all changes in this file)', buf = bufnr }) + map('n', 'hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) + map('n', 'hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' }) + map('n', 'hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' }) + map('n', 'hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' }) + map('n', 'hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' }) + map('n', 'hi', gitsigns.preview_hunk_inline, { desc = 'git preview hunk [i]nline' }) + map('n', 'hb', function() gitsigns.blame_line { full = true } end, { desc = 'git [b]lame line' }) + map('n', 'hd', gitsigns.diffthis, { desc = 'git [d]iff against index' }) + map('n', 'hD', function() gitsigns.diffthis '~' end, { desc = 'git [D]iff against last commit' }) + map('n', 'hQ', function() gitsigns.setqflist 'all' end, { desc = 'git hunk [Q]uickfix list (all files in repo)' }) + map('n', 'hq', gitsigns.setqflist, { desc = 'git hunk [q]uickfix list (all changes in this file)' }) -- Toggles - vim.keymap.set('n', 'tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line', buf = bufnr }) - vim.keymap.set('n', 'tw', gitsigns.toggle_word_diff, { desc = '[T]oggle git intra-line [w]ord diff', buf = bufnr }) + map('n', 'tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' }) + map('n', 'tw', gitsigns.toggle_word_diff, { desc = '[T]oggle git intra-line [w]ord diff' }) -- Text object - vim.keymap.set({ 'o', 'x' }, 'ih', gitsigns.select_hunk, { desc = 'text object [i]nside [h]unk', buf = bufnr }) + map({ 'o', 'x' }, 'ih', gitsigns.select_hunk, { desc = 'text object [i]nside [h]unk' }) end, } From daff5090162c9b5af944a5f3ccc197cf69691f7b Mon Sep 17 00:00:00 2001 From: Damjan 9000 Date: Mon, 7 Sep 2026 18:10:59 +0200 Subject: [PATCH 2/2] gitsigns: use `buf` keymap option on Neovim 0.12.1+ Follows the upstream rename of `buffer` to `buf` (neovim/neovim#38360, first shipped in v0.12.0); `buffer` is soft-deprecated, removal planned in v0.15. Fall back to `buffer` on older Neovim. The 0.12.1 floor (not 0.12.0) avoids distro snapshot builds like Ubuntu 25.10 `0.12.0~ubuntu1` (git snapshot d62bbe24cb), which reports `0.12.0-dev` but predates the `buf` support and rejects it with `invalid key: buf`. --- init.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 5fb3f3674db..07df83c4e2f 100644 --- a/init.lua +++ b/init.lua @@ -364,7 +364,12 @@ do on_attach = function(bufnr) local function map(mode, l, r, opts) opts = opts or {} - opts.buffer = bufnr + -- opts.buf requires Neovim 0.12.1+; older versions use opts.buffer + if vim.version.ge and vim.version.ge(vim.version(), '0.12.1') then + opts.buf = bufnr + else + opts.buffer = bufnr + end vim.keymap.set(mode, l, r, opts) end