Files
dotfiles/.config/nvim/lua/configs/gitsigns.lua
2025-05-10 10:18:28 +03:00

64 lines
2.6 KiB
Lua

local gs = require "gitsigns"
gs.setup {
auto_attach = true,
attach_to_untracked = false, -- use keymap
max_file_length = 10000,
update_debounce = 500,
-- base = "@", -- index by default
-- worktrees = {}, -- TODO for dotfiles
numhl = true,
signcolumn = false,
current_line_blame = false,
sign_priority = 6,
diff_opts = {
internal = true, -- for linematch
linematch = true, -- align lines
algorithm = "histogram", -- myers, minimal, patience, histrogram
},
preview_config = { border = vim.g.border_bleed },
}
-- Normal
Lmap("hb", "Blame line", gs.blame_line)
Lmap("hB", "Blame full", W(gs.blame_line) { full = true })
Lmap("hs", "Stage hunk", gs.stage_hunk)
Lmap("hr", "Reset hunk", gs.reset_hunk)
Lmap("hS", "Stage buffer", gs.stage_buffer)
Lmap("hR", "Reset buffer", gs.reset_buffer)
Lmap("hu", "Undo stage hunk", gs.undo_stage_hunk) -- only in current session
Lmap("hp", "Preview hunk", gs.preview_hunk)
Lmap("hi", "Inline preview", gs.preview_hunk_inline)
Lmap("hl", "List hunks", gs.setloclist)
Lmap("hq", "Qlist all hunks", W(gs.setqflist) "attached")
Lmap("hQ", "Qlist ALL hunks", W(gs.setqflist) "all")
Lmap("hs", "x", "Stage region", function() gs.stage_hunk { vim.fn.line ".", vim.fn.line "v" } end)
Lmap("hr", "x", "Reset region", function() gs.reset_hunk { vim.fn.line ".", vim.fn.line "v" } end)
-- Toggle
Lmap("hts", "Signs", gs.toggle_signs)
Lmap("htn", "Number hl", gs.toggle_numhl)
Lmap("htl", "Line hl", gs.toggle_linehl)
Lmap("htd", "Deleted", gs.toggle_deleted)
Lmap("htw", "Word diff", gs.toggle_word_diff)
Lmap("htb", "Blame", gs.toggle_current_line_blame)
-- View file
Lmap("hvh", "HEAD", W(gs.show) "@")
Lmap("hvp", "HEAD~", W(gs.show) "~")
Lmap("hvs", "Staged", gs.show)
Lmap("hvH", "Diff HEAD", W(gs.diffthis, "@", { split = "belowright" }))
Lmap("hvP", "Diff HEAD~", W(gs.diffthis, "~", { split = "belowright" }))
Lmap("hvS", "Diff Staged", W(gs.diffthis, nil, { split = "belowright" }))
-- Control
Lmap("hca", "Attach", gs.attach)
Lmap("hcd", "Detach", gs.detach)
Lmap("hcD", "Detach all", gs.detach_all)
Lmap("hcr", "Refresh", gs.refresh)
Lmap("hcs", "Base->staged", gs.change_base)
Lmap("hcS", "Base->staged all", W(gs.change_base, nil, true))
Lmap("hch", "Base->HEAD", W(gs.change_base) "@")
Lmap("hcH", "Base->HEAD all", W(gs.change_base, "@", true))
-- Other
vim.keymap.set({"x", "o"}, "ih", gs.select_hunk, { desc = "Select hunk" })
MakePair("h", "hunk", gs.next_hunk, gs.prev_hunk)