1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
return {
{
"neogit",
for_cat = "core.git",
keys = { { "<leader>gg", "<CMD>Neogit<CR>", desc = "Open Neogit Ui" } },
cmd = { "Neogit" },
after = function()
require("neogit").setup({
disable_hint = true,
kind = "split_above",
commit_editor = {
kind = "tab",
show_staged_diff = true,
staged_diff_split_kind = "auto",
spell_check = true,
},
})
end,
},
{
"gitsigns.nvim",
event = { "DeferredUIEnter" },
for_cat = "core.git",
after = function(_)
require("gitsigns").setup({
signs = {
add = { text = "+" },
change = { text = "~" },
delete = { text = "_" },
topdelete = { text = "‾" },
changedelete = { text = "~" },
},
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
-- Navigation
map({ "n", "v" }, "]c", function()
if vim.wo.diff then
return "]c"
end
vim.schedule(function()
gs.next_hunk()
end)
return "<Ignore>"
end, { expr = true, desc = "Jump to next hunk" })
map({ "n", "v" }, "[c", function()
if vim.wo.diff then
return "[c"
end
vim.schedule(function()
gs.prev_hunk()
end)
return "<Ignore>"
end, { expr = true, desc = "Jump to previous hunk" })
-- Actions
-- visual mode
map("v", "<leader>hs", function()
gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
end, { desc = "stage git hunk" })
map("v", "<leader>hr", function()
gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
end, { desc = "reset git hunk" })
-- normal mode
map("n", "<leader>gs", gs.stage_hunk, { desc = "git stage hunk" })
map("n", "<leader>gr", gs.reset_hunk, { desc = "git reset hunk" })
map("n", "<leader>gS", gs.stage_buffer, { desc = "git Stage buffer" })
map("n", "<leader>gu", gs.undo_stage_hunk, { desc = "undo stage hunk" })
map("n", "<leader>gR", gs.reset_buffer, { desc = "git Reset buffer" })
map("n", "<leader>gp", gs.preview_hunk, { desc = "preview git hunk" })
map("n", "<leader>gb", function()
gs.blame_line({ full = false })
end, { desc = "git blame line" })
-- map('n', '<leader>gd', gs.diffthis, { desc = 'git diff against index' })
map("n", "<leader>gD", function()
gs.diffthis("~")
end, { desc = "git diff against last commit" })
-- Toggles
map("n", "<leader>gtb", gs.toggle_current_line_blame, { desc = "toggle git blame line" })
map("n", "<leader>gtd", gs.toggle_deleted, { desc = "toggle git show deleted" })
-- Text object
map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", { desc = "select git hunk" })
end,
})
end,
},
}
|