52 lines
1.6 KiB
Lua
52 lines
1.6 KiB
Lua
-- lua/plugins/extras/diffview.lua
|
|
-- Side-by-side diff view for staged/unstaged changes across all files
|
|
-- https://github.com/sindrets/diffview.nvim
|
|
--
|
|
-- Keymaps:
|
|
-- <leader>ds — staged changes (git diff --cached)
|
|
-- <leader>du — unstaged changes (git diff)
|
|
-- <leader>dh — diff against HEAD
|
|
-- <leader>dq — close diffview
|
|
--
|
|
-- Inside diffview:
|
|
-- <Tab> / <S-Tab> — next/prev changed file
|
|
-- [c / ]c — prev/next hunk in file
|
|
-- s — stage/unstage file (in file panel)
|
|
-- q / <leader>dq — close
|
|
|
|
return {
|
|
'sindrets/diffview.nvim',
|
|
lazy = true,
|
|
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
|
cmd = { 'DiffviewOpen', 'DiffviewClose', 'DiffviewFileHistory' },
|
|
keys = {
|
|
{ '<leader>ds', '<cmd>DiffviewOpen --staged<cr>', desc = 'git [d]iff [s]taged' },
|
|
{ '<leader>du', '<cmd>DiffviewOpen<cr>', desc = 'git [d]iff [u]nstaged' },
|
|
{ '<leader>dh', '<cmd>DiffviewOpen HEAD<cr>', desc = 'git [d]iff [h]ead' },
|
|
{ '<leader>dq', '<cmd>DiffviewClose<cr>', desc = 'git [d]iff [q]uit' },
|
|
},
|
|
opts = {
|
|
enhanced_diff_hl = true,
|
|
view = {
|
|
default = {
|
|
layout = 'diff2_horizontal', -- side by side
|
|
winbar_info = true,
|
|
},
|
|
merge_tool = {
|
|
layout = 'diff3_horizontal',
|
|
disable_diagnostics = true,
|
|
},
|
|
},
|
|
file_panel = {
|
|
listing_style = 'tree',
|
|
win_config = { width = 35 },
|
|
},
|
|
hooks = {
|
|
-- close diffview with q in any diffview buffer
|
|
view_opened = function()
|
|
vim.keymap.set('n', 'q', '<cmd>DiffviewClose<cr>', { buffer = true, silent = true })
|
|
end,
|
|
},
|
|
},
|
|
}
|