summaryrefslogtreecommitdiff
path: root/neovim/.config/nvim/lua/config/gitsigns.lua
diff options
context:
space:
mode:
authorMichaël Ball <michael@Michaels-MacBook-Pro.local>2024-07-16 16:12:12 +0100
committerMichaël Ball <michael@Michaels-MacBook-Pro.local>2024-07-16 16:12:12 +0100
commit4385c252eb461a0ec9dbf9569a8f9ef7f0664289 (patch)
treede1005fbc0274eea549dc42ca5be17101b937463 /neovim/.config/nvim/lua/config/gitsigns.lua
Initial commit
Diffstat (limited to 'neovim/.config/nvim/lua/config/gitsigns.lua')
-rw-r--r--neovim/.config/nvim/lua/config/gitsigns.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/neovim/.config/nvim/lua/config/gitsigns.lua b/neovim/.config/nvim/lua/config/gitsigns.lua
new file mode 100644
index 0000000..4f4e25c
--- /dev/null
+++ b/neovim/.config/nvim/lua/config/gitsigns.lua
@@ -0,0 +1,40 @@
+require('gitsigns').setup {
+ 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', ']c', function()
+ if vim.wo.diff then return ']c' end
+ vim.schedule(function() gs.next_hunk() end)
+ return '<Ignore>'
+ end, {expr=true})
+
+ map('n', '[c', function()
+ if vim.wo.diff then return '[c' end
+ vim.schedule(function() gs.prev_hunk() end)
+ return '<Ignore>'
+ end, {expr=true})
+
+ -- Actions
+ map({'n', 'v'}, '<leader>hs', ':Gitsigns stage_hunk<CR>')
+ map({'n', 'v'}, '<leader>hr', ':Gitsigns reset_hunk<CR>')
+ map('n', '<leader>hS', gs.stage_buffer)
+ map('n', '<leader>hu', gs.undo_stage_hunk)
+ map('n', '<leader>hR', gs.reset_buffer)
+ map('n', '<leader>hp', gs.preview_hunk)
+ map('n', '<leader>hb', function() gs.blame_line{full=true} end)
+ map('n', '<leader>tb', gs.toggle_current_line_blame)
+ map('n', '<leader>hd', gs.diffthis)
+ map('n', '<leader>hD', function() gs.diffthis('~') end)
+ map('n', '<leader>td', gs.toggle_deleted)
+
+ -- Text object
+ map({'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
+ end
+}