feat(git): add in-house hunks module, replace gitsigns.nvim
This commit is contained in:
+47
-13
@@ -34,6 +34,12 @@ local DEFAULT_HIGHLIGHTS = {
|
||||
GitUnmergedBothModified = "GitUnmerged",
|
||||
GitUnmergedDeletedByThem = "GitUnmerged",
|
||||
GitUnmergedDeletedByUs = "GitUnmerged",
|
||||
|
||||
GitHunkAdd = "Added",
|
||||
GitHunkChange = "Changed",
|
||||
GitHunkDelete = "Removed",
|
||||
GitHunkAddLine = "DiffAdd",
|
||||
GitHunkDeleteLine = "DiffDelete",
|
||||
}
|
||||
for name, link in pairs(DEFAULT_HIGHLIGHTS) do
|
||||
vim.api.nvim_set_hl(0, name, { link = link, default = true })
|
||||
@@ -45,6 +51,7 @@ vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, {
|
||||
group = group,
|
||||
callback = function(args)
|
||||
require("git.core.repo").track(args.buf)
|
||||
require("git.hunks").attach(args.buf)
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_create_autocmd({ "BufWritePost", "FileChangedShellPost" }, {
|
||||
@@ -64,6 +71,7 @@ vim.api.nvim_create_autocmd({ "ShellCmdPost", "TermLeave", "FocusGained" }, {
|
||||
vim.api.nvim_create_autocmd({ "BufDelete", "BufWipeout" }, {
|
||||
group = group,
|
||||
callback = function(args)
|
||||
require("git.hunks").detach(args.buf)
|
||||
require("git.core.repo").unbind(args.buf)
|
||||
end,
|
||||
})
|
||||
@@ -138,7 +146,7 @@ vim.api.nvim_create_user_command("Gdiffsplit", function(opts)
|
||||
mods = { vertical = false }
|
||||
rev_idx = 2
|
||||
end
|
||||
require("git.diff").split({ target = fargs[rev_idx], mods = mods })
|
||||
require("git.diffsplit").open({ target = fargs[rev_idx], mods = mods })
|
||||
end, {
|
||||
nargs = "*",
|
||||
complete = function(arg_lead, cmd_line, _)
|
||||
@@ -199,24 +207,24 @@ vim.keymap.set("n", "<Plug>(git-edit)", function()
|
||||
})
|
||||
end, { silent = true, desc = "Edit a git object" })
|
||||
|
||||
vim.keymap.set("n", "<Plug>(git-diff-vertical)", function()
|
||||
require("git.diff").split({ mods = { vertical = true } })
|
||||
end, { silent = true, desc = "Diff against index (vertical)" })
|
||||
vim.keymap.set("n", "<Plug>(git-diff-horizontal)", function()
|
||||
require("git.diff").split({ mods = { vertical = false } })
|
||||
end, { silent = true, desc = "Diff against index (horizontal)" })
|
||||
vim.keymap.set("n", "<Plug>(git-diff-vertical-head)", function()
|
||||
require("git.diff").split({
|
||||
vim.keymap.set("n", "<Plug>(git-diffsplit-vertical)", function()
|
||||
require("git.diffsplit").open({ mods = { vertical = true } })
|
||||
end, { silent = true, desc = "Open a diff split against index (vertical)" })
|
||||
vim.keymap.set("n", "<Plug>(git-diffsplit-horizontal)", function()
|
||||
require("git.diffsplit").open({ mods = { vertical = false } })
|
||||
end, { silent = true, desc = "Open a diff split against index (horizontal)" })
|
||||
vim.keymap.set("n", "<Plug>(git-diffsplit-vertical-head)", function()
|
||||
require("git.diffsplit").open({
|
||||
target = "HEAD",
|
||||
mods = { vertical = true },
|
||||
})
|
||||
end, { silent = true, desc = "Diff against HEAD (vertical)" })
|
||||
vim.keymap.set("n", "<Plug>(git-diff-horizontal-head)", function()
|
||||
require("git.diff").split({
|
||||
end, { silent = true, desc = "Open a diff split against HEAD (vertical)" })
|
||||
vim.keymap.set("n", "<Plug>(git-diffsplit-horizontal-head)", function()
|
||||
require("git.diffsplit").open({
|
||||
target = "HEAD",
|
||||
mods = { vertical = false },
|
||||
})
|
||||
end, { silent = true, desc = "Diff against HEAD (horizontal)" })
|
||||
end, { silent = true, desc = "Open a diff split against HEAD (horizontal)" })
|
||||
|
||||
vim.keymap.set("n", "<Plug>(git-status-open)", function()
|
||||
require("git.status_view").open()
|
||||
@@ -245,3 +253,29 @@ if vim.g.git_statusline ~= false then
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
vim.keymap.set({ "n", "x" }, "<Plug>(git-hunk-next)", function()
|
||||
require("git.hunks").nav("next")
|
||||
end, { silent = true, desc = "Jump to next git hunk" })
|
||||
vim.keymap.set({ "n", "x" }, "<Plug>(git-hunk-prev)", function()
|
||||
require("git.hunks").nav("prev")
|
||||
end, { silent = true, desc = "Jump to previous git hunk" })
|
||||
vim.keymap.set("n", "<Plug>(git-hunk-stage)", function()
|
||||
require("git.hunks").stage_hunk()
|
||||
end, { silent = true, desc = "Stage hunk under cursor" })
|
||||
vim.keymap.set("n", "<Plug>(git-hunk-reset)", function()
|
||||
require("git.hunks").reset_hunk()
|
||||
end, { silent = true, desc = "Reset hunk under cursor" })
|
||||
vim.keymap.set("n", "<Plug>(git-hunk-preview)", function()
|
||||
require("git.hunks").preview_hunk()
|
||||
end, { silent = true, desc = "Preview hunk under cursor" })
|
||||
vim.keymap.set("n", "<Plug>(git-hunk-select)", function()
|
||||
require("git.hunks").select_hunk()
|
||||
end, { silent = true, desc = "Select hunk under cursor" })
|
||||
vim.keymap.set("n", "<Plug>(git-overlay-toggle)", function()
|
||||
require("git.hunks").toggle_overlay()
|
||||
end, { silent = true, desc = "Toggle the git diff overlay" })
|
||||
|
||||
vim.api.nvim_create_user_command("GitDiffOverlay", function()
|
||||
require("git.hunks").toggle_overlay()
|
||||
end, { desc = "Toggle the git diff overlay in the current buffer" })
|
||||
|
||||
Reference in New Issue
Block a user