112 lines
2.4 KiB
Lua
112 lines
2.4 KiB
Lua
-- gitsigns.nvim
|
|
--- Displays git changes in the sidebar, configurably and efficiently.
|
|
--- See `:help gitsigns`
|
|
return {
|
|
'lewis6991/gitsigns.nvim',
|
|
commit = '9b36d497495436c135659902054ee637e0ba6021',
|
|
event = 'VeryLazy',
|
|
lazy = false,
|
|
-- See: https://github.com/lewis6991/gitsigns.nvim/issues/796
|
|
|
|
opts = {
|
|
numhl = true,
|
|
|
|
on_attach = function(buf)
|
|
-- Hunk Navigation
|
|
vim.keymap.set(
|
|
'n',
|
|
']g',
|
|
function()
|
|
if vim.wo.diff then
|
|
vim.cmd.normal({ ']c', bang = true })
|
|
else
|
|
require('gitsigns').nav_hunk('next')
|
|
end
|
|
end,
|
|
{ buffer = buf, desc = 'Next [G]it Change' }
|
|
)
|
|
vim.keymap.set(
|
|
'n',
|
|
'[g',
|
|
function()
|
|
if vim.wo.diff then
|
|
vim.cmd.normal({ '[c', bang = true })
|
|
else
|
|
require('gitsigns').nav_hunk('prev')
|
|
end
|
|
end,
|
|
{ buffer = buf, desc = 'Prev [G]it Change' }
|
|
)
|
|
|
|
-- Hunk Preview
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>gp',
|
|
function() require('gitsigns').preview_hunk() end,
|
|
{ buffer = buf, desc = '[G]it [P]review Hunk' }
|
|
)
|
|
|
|
-- Buffer Staging / Unstaging
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>gs',
|
|
function() require('gitsigns').stage_buffer() end,
|
|
{ buffer = buf, desc = '[G]it [S]tage Buffer' }
|
|
)
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>gS',
|
|
function() require('gitsigns').reset_buffer_index() end,
|
|
{ buffer = buf, desc = '[G]it Unstage Buffer' }
|
|
)
|
|
|
|
-- Hunk Staging
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>gh',
|
|
function() require('gitsigns').stage_hunk() end,
|
|
{ buffer = buf, desc = '[G]it Hunk [S]tage Toggle' }
|
|
)
|
|
|
|
-- Restoration
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>gr',
|
|
function()
|
|
require('gitsigns').reset_hunk()
|
|
end,
|
|
{ buffer = buf, desc = '[G]it [R]estore Hunk' }
|
|
)
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>gR',
|
|
function()
|
|
local choice = vim.fn.confirm(
|
|
"Delete all unstaged changes in this buffer?",
|
|
"&Yes\n&No",
|
|
2
|
|
)
|
|
if choice == 1 then
|
|
require('gitsigns').reset_buffer()
|
|
end
|
|
end,
|
|
{ buffer = buf, desc = '[G]it [R]estore Buffer' }
|
|
)
|
|
|
|
vim.keymap.set(
|
|
'n',
|
|
'<leader>ga',
|
|
function()
|
|
require('gitsigns').toggle_linehl()
|
|
require('gitsigns').toggle_word_diff()
|
|
end,
|
|
{ buffer = buf, desc = '[G]it [A]nalysis Toggle' }
|
|
)
|
|
|
|
|
|
-- TODO: Shortcut for opening lazygit in a new :term.
|
|
--- Perhaps even in a new tab?
|
|
end,
|
|
}
|
|
}
|