aboutsummaryrefslogtreecommitdiff
path: root/neovim/.config/nvim/lua/plugins/gitsigns.lua
diff options
context:
space:
mode:
Diffstat (limited to 'neovim/.config/nvim/lua/plugins/gitsigns.lua')
-rw-r--r--neovim/.config/nvim/lua/plugins/gitsigns.lua27
1 files changed, 27 insertions, 0 deletions
diff --git a/neovim/.config/nvim/lua/plugins/gitsigns.lua b/neovim/.config/nvim/lua/plugins/gitsigns.lua
new file mode 100644
index 0000000..61f6238
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/gitsigns.lua
@@ -0,0 +1,27 @@
+local map = vim.keymap.set
+
+require("gitsigns").setup({
+ signs = {
+ add = { text = "+" },
+ delete = { text = "-" },
+ change = { text = "~" },
+ changedelete = { text = "⋍" },
+ },
+ on_attach = function(buf)
+ local gs = package.loaded.gitsigns
+ local opts = { buffer = buf, expr = true, replace_keycodes = false }
+
+ -- Navigation
+ map("n", "]c", "&diff ? ']c' : '<CMD>Gitsigns next_hunk<CR>'", opts)
+ map("n", "[c", "&diff ? '[c' : '<CMD>Gitsigns prev_hunk<CR>'", opts)
+
+ -- Actions
+ map({ "n", "v" }, "<leader>hr", gs.reset_hunk, { buffer = buf })
+ map({ "n", "v" }, "<leader>hs", gs.stage_hunk)
+ map("n", "<leader>hS", gs.stage_buffer, { buffer = buf })
+ map("n", "<leader>hp", gs.preview_hunk, { buffer = buf })
+
+ -- Text object
+ map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", { buffer = buf })
+ end,
+})