Fix which-key not seeing gitsigns maps, add diagnostic maps
The gitsigns keymaps were defined in on_attach, so they were buffer-local and created asynchronously - gitsigns shells out to git before attaching. which-key had already built its keymap tree for the buffer by then, and it only invalidates that cache on BufReadPost, BufNew and LspAttach, so maps added afterwards stayed invisible. Buf:get() returns cached mode state unless explicitly passed `update`, which is why re-entering the buffer didn't help either. Mapping globally instead means the maps exist before which-key builds any tree. The gitsigns API no-ops in buffers it hasn't attached to (checked stage/reset/preview/blame/nav in a non-git directory), so the only change is that the maps now exist everywhere rather than just in git-tracked buffers. Also puts the diagnostic float and quickfix list on <leader>d. Nvim already binds <C-W>d and ]d/[d for these, so this is a rebinding for discoverability rather than new capability. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5d0688c827
commit
e8e9bf0663
3 changed files with 63 additions and 54 deletions
|
|
@ -16,3 +16,8 @@ vim.diagnostic.config({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Nvim already binds ]d / [d to jump and <C-W>d to show the diagnostic under
|
||||||
|
-- the cursor; these put the same actions on <leader> so which-key lists them.
|
||||||
|
vim.keymap.set('n', '<leader>dd', vim.diagnostic.open_float, { desc = 'Show diagnostic' })
|
||||||
|
vim.keymap.set('n', '<leader>dq', vim.diagnostic.setqflist, { desc = 'Diagnostics to quickfix' })
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,16 @@
|
||||||
vim.pack.add({ 'https://github.com/lewis6991/gitsigns.nvim' })
|
vim.pack.add({ 'https://github.com/lewis6991/gitsigns.nvim' })
|
||||||
|
|
||||||
require('gitsigns').setup({
|
|
||||||
on_attach = function(bufnr)
|
|
||||||
local gitsigns = require('gitsigns')
|
local gitsigns = require('gitsigns')
|
||||||
|
|
||||||
|
gitsigns.setup()
|
||||||
|
|
||||||
|
-- Mapped globally rather than from on_attach. Gitsigns attaches asynchronously,
|
||||||
|
-- after which-key has already built its keymap tree for the buffer, and
|
||||||
|
-- which-key only rebuilds that on BufReadPost/BufNew/LspAttach - so
|
||||||
|
-- buffer-local maps added later never show up in its popup. The gitsigns API
|
||||||
|
-- no-ops in buffers it hasn't attached to, so global maps are safe.
|
||||||
local function map(mode, lhs, rhs, desc)
|
local function map(mode, lhs, rhs, desc)
|
||||||
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
|
vim.keymap.set(mode, lhs, rhs, { desc = desc })
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Navigation, falling back to vim's own diff motions in diff mode
|
-- Navigation, falling back to vim's own diff motions in diff mode
|
||||||
|
|
@ -51,5 +56,3 @@ require('gitsigns').setup({
|
||||||
-- Toggles
|
-- Toggles
|
||||||
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, 'Toggle line blame')
|
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, 'Toggle line blame')
|
||||||
map('n', '<leader>td', gitsigns.toggle_deleted, 'Toggle deleted lines')
|
map('n', '<leader>td', gitsigns.toggle_deleted, 'Toggle deleted lines')
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,9 @@ local wk = require('which-key')
|
||||||
|
|
||||||
wk.setup()
|
wk.setup()
|
||||||
|
|
||||||
-- Names for the gitsigns prefixes, so the popup groups them sensibly
|
-- Names for the <leader> prefixes, so the popup groups them sensibly
|
||||||
wk.add({
|
wk.add({
|
||||||
|
{ '<leader>d', group = 'diagnostics' },
|
||||||
{ '<leader>h', group = 'hunks' },
|
{ '<leader>h', group = 'hunks' },
|
||||||
{ '<leader>t', group = 'toggles' },
|
{ '<leader>t', group = 'toggles' },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue