A very fast neovim config :D
1local M = {
2 "lewis6991/gitsigns.nvim",
3 event = "BufReadPost",
4 opts = {
5 signs = {
6 add = { text = "+" },
7 change = { text = "~" },
8 delete = { text = "_" },
9 topdelete = { text = "‾" },
10 changedelete = { text = "~" },
11 },
12 on_attach = function(bufnr)
13 local gitsigns = require("gitsigns")
14
15 local function map(mode, l, r, opts)
16 opts = opts or {}
17 opts.buffer = bufnr
18 vim.keymap.set(mode, l, r, opts)
19 end
20
21 -- Navigation
22 map("n", "]c", function()
23 if vim.wo.diff then
24 vim.cmd.normal({ "]c", bang = true })
25 else
26 gitsigns.nav_hunk("next")
27 end
28 end)
29
30 map("n", "[c", function()
31 if vim.wo.diff then
32 vim.cmd.normal({ "[c", bang = true })
33 else
34 gitsigns.nav_hunk("prev")
35 end
36 end)
37
38 -- Actions
39 map("n", "<leader>sh", gitsigns.stage_hunk)
40 map("n", "<leader>rh", gitsigns.reset_hunk)
41
42 map("v", "<leader>sh", function()
43 gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
44 end)
45
46 map("v", "<leader>rh", function()
47 gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
48 end)
49
50 map("n", "<leader>sH", gitsigns.stage_buffer)
51 map("n", "<leader>rH", gitsigns.reset_buffer)
52 map("n", "<leader>ph", gitsigns.preview_hunk)
53
54 map("n", "<leader>bh", function()
55 gitsigns.blame_line({ full = true })
56 end)
57
58 map("n", "<leader>hd", gitsigns.diffthis)
59
60 map("n", "<leader>hD", function()
61 gitsigns.diffthis("~")
62 end)
63
64 map("n", "<leader>hQ", function()
65 gitsigns.setqflist("all")
66 end)
67 map("n", "<leader>hq", gitsigns.setqflist)
68
69 -- Toggles
70 map("n", "<leader>tb", gitsigns.toggle_current_line_blame)
71 end,
72 },
73}
74
75return M