Description
I have a following Lazy.nvim config for Diffview:
Config
{
'sindrets/diffview.nvim',
lazy = false,
keys = {
-- ...
},
opts = function()
local actions = require('diffview.actions')
return {
-- ...
keymaps = {
view = {
{ 'n', '<tab>', actions.select_next_entry, { desc = 'Next file diff' } },
{ 'n', '<s-tab>', actions.select_prev_entry, { desc = 'Previous file diff' } },
{ 'n', '[x', actions.prev_conflict, { desc = 'Previous conflict' } },
{ 'n', ']x', actions.next_conflict, { desc = 'Next conflict' } },
{ 'n', '<localleader>xo', actions.conflict_choose('ours'), { desc = 'Accept ours' } },
{ 'n', '<localleader>xt', actions.conflict_choose('theirs'), { desc = 'Accept theirs' } },
{ 'n', '<localleader>xb', actions.conflict_choose('base'), { desc = 'Accept base' } },
{ 'n', '<localleader>xa', actions.conflict_choose('all'), { desc = 'Accept all' } },
{ 'n', '<localleader>Xo', actions.conflict_choose_all('ours'), { desc = 'Accept ours (whole file)' } },
{ 'n', '<localleader>Xt', actions.conflict_choose_all('theirs'), { desc = 'Accept theirs (whole file)' } },
{ 'n', '<localleader>Xb', actions.conflict_choose_all('base'), { desc = 'Accept base (whole file)' } },
{ 'n', '<localleader>Xa', actions.conflict_choose_all('all'), { desc = 'Accept all (whole file)' } },
},
},
}
end,
main = 'diffview',
setup = true,
}
(full config here, minimal config below)
When I do :DiffviewOpen, I expect the <localleader>xo etc keymaps to be available. However, which-key doesn't show them when I press <localleader>, and pressing <localleader>xo doesn't do anything. <tab> and <s-tab> keymaps are working though. If I then <c-w>h to the diffview sidebar and then <c-w>l back to the file diff, the keymaps become available.
Expected behavior
<localleader>-prefixed keymaps are available immediately after opening file diff via :DiffviewOpen
Actual behavior
<localleader>-prefixed keymaps only become available after switching to the sidebar and then back to file diff
Steps to reproduce
:DiffviewOpen
- Try to use
<localleader>-prefixed keymap
- Switch to sidebar and back
- Try to use a keymap again
Health check
Output of :checkhealth diffview
==============================================================================
diffview: require("diffview.health").check()
Checking plugin dependencies ~
- OK nvim-web-devicons installed.
Checking VCS tools ~
- The plugin requires at least one of the supported VCS tools to be valid.
- OK Git found.
- OK Git is up-to-date. (2.43.0)
- WARNING Configured `hg_cmd` is not executable: 'hg'
Log info
Relevant info from :DiffviewLog
############################
### PUT LOG CONTENT HERE ###
############################
Neovim version
NVIM v0.11.0-dev-1775+g4a2a54f993
Build type: RelWithDebInfo
LuaJIT 2.1.1736781742
I think this was the case with stable Neovim too, lmk if you can't reproduce this on stable, I'll try to roll back and reproduce.
Operating system and version
Linux 6.8.0-55-generic x86_64 GNU/Linux
Minimal config
-- #######################################
-- ### USAGE: nvim --clean -u mini.lua ###
-- #######################################
local root = vim.fn.stdpath('run') .. '/nvim/diffview.nvim'
local plugin_dir = root .. '/plugins'
vim.fn.mkdir(plugin_dir, 'p')
for _, name in ipairs({ 'config', 'data', 'state', 'cache' }) do
vim.env[('XDG_%s_HOME'):format(name:upper())] = root .. '/' .. name
end
local plugins = {
{ 'nvim-web-devicons', url = 'https://github.com/nvim-tree/nvim-web-devicons.git' },
{ 'diffview.nvim', url = 'https://github.com/sindrets/diffview.nvim.git' },
{ 'folke/which-key.nvim', url = 'https://github.com/folke/which-key.nvim.git' },
}
for _, spec in ipairs(plugins) do
local install_path = plugin_dir .. '/' .. spec[1]
if vim.fn.isdirectory(install_path) ~= 1 then
if spec.url then
print(string.format("Installing '%s'...", spec[1]))
vim.fn.system({ 'git', 'clone', '--depth=1', spec.url, install_path })
end
end
vim.opt.runtimepath:append(spec.path or install_path)
end
local actions = require('diffview.actions')
require('diffview').setup({
keymaps = {
view = {
{ 'n', '<tab>', actions.select_next_entry, { desc = 'Next file diff' } },
{ 'n', '<s-tab>', actions.select_prev_entry, { desc = 'Previous file diff' } },
{ 'n', '[x', actions.prev_conflict, { desc = 'Previous conflict' } },
{ 'n', ']x', actions.next_conflict, { desc = 'Next conflict' } },
{ 'n', '<localleader>xo', actions.conflict_choose('ours'), { desc = 'Accept ours' } },
{ 'n', '<localleader>xt', actions.conflict_choose('theirs'), { desc = 'Accept theirs' } },
{ 'n', '<localleader>xb', actions.conflict_choose('base'), { desc = 'Accept base' } },
{ 'n', '<localleader>xa', actions.conflict_choose('all'), { desc = 'Accept all' } },
{ 'n', '<localleader>Xo', actions.conflict_choose_all('ours'), { desc = 'Accept ours (whole file)' } },
{ 'n', '<localleader>Xt', actions.conflict_choose_all('theirs'), { desc = 'Accept theirs (whole file)' } },
{ 'n', '<localleader>Xb', actions.conflict_choose_all('base'), { desc = 'Accept base (whole file)' } },
{ 'n', '<localleader>Xa', actions.conflict_choose_all('all'), { desc = 'Accept all (whole file)' } },
},
},
})
vim.g.mapleader = ' '
vim.g.maplocalleader = ','
vim.opt.termguicolors = true
vim.cmd('colorscheme ' .. (vim.fn.has('nvim-0.8') == 1 and 'habamax' or 'slate'))
print('Ready!')
Description
I have a following Lazy.nvim config for Diffview:
Config
{ 'sindrets/diffview.nvim', lazy = false, keys = { -- ... }, opts = function() local actions = require('diffview.actions') return { -- ... keymaps = { view = { { 'n', '<tab>', actions.select_next_entry, { desc = 'Next file diff' } }, { 'n', '<s-tab>', actions.select_prev_entry, { desc = 'Previous file diff' } }, { 'n', '[x', actions.prev_conflict, { desc = 'Previous conflict' } }, { 'n', ']x', actions.next_conflict, { desc = 'Next conflict' } }, { 'n', '<localleader>xo', actions.conflict_choose('ours'), { desc = 'Accept ours' } }, { 'n', '<localleader>xt', actions.conflict_choose('theirs'), { desc = 'Accept theirs' } }, { 'n', '<localleader>xb', actions.conflict_choose('base'), { desc = 'Accept base' } }, { 'n', '<localleader>xa', actions.conflict_choose('all'), { desc = 'Accept all' } }, { 'n', '<localleader>Xo', actions.conflict_choose_all('ours'), { desc = 'Accept ours (whole file)' } }, { 'n', '<localleader>Xt', actions.conflict_choose_all('theirs'), { desc = 'Accept theirs (whole file)' } }, { 'n', '<localleader>Xb', actions.conflict_choose_all('base'), { desc = 'Accept base (whole file)' } }, { 'n', '<localleader>Xa', actions.conflict_choose_all('all'), { desc = 'Accept all (whole file)' } }, }, }, } end, main = 'diffview', setup = true, }(full config here, minimal config below)
When I do
:DiffviewOpen, I expect the<localleader>xoetc keymaps to be available. However, which-key doesn't show them when I press<localleader>, and pressing<localleader>xodoesn't do anything.<tab>and<s-tab>keymaps are working though. If I then<c-w>hto the diffview sidebar and then<c-w>lback to the file diff, the keymaps become available.Expected behavior
<localleader>-prefixed keymaps are available immediately after opening file diff via:DiffviewOpenActual behavior
<localleader>-prefixed keymaps only become available after switching to the sidebar and then back to file diffSteps to reproduce
:DiffviewOpen<localleader>-prefixed keymapHealth check
Output of
:checkhealth diffviewLog info
Relevant info from
:DiffviewLogNeovim version
I think this was the case with stable Neovim too, lmk if you can't reproduce this on stable, I'll try to roll back and reproduce.
Operating system and version
Linux 6.8.0-55-generic x86_64 GNU/Linux
Minimal config