aboutsummaryrefslogtreecommitdiff
path: root/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua
diff options
context:
space:
mode:
Diffstat (limited to 'configs/nvim/lua/crupest/nvim/plugins/gitsign.lua')
-rw-r--r--configs/nvim/lua/crupest/nvim/plugins/gitsign.lua51
1 files changed, 51 insertions, 0 deletions
diff --git a/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua b/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua
new file mode 100644
index 0000000..220c91a
--- /dev/null
+++ b/configs/nvim/lua/crupest/nvim/plugins/gitsign.lua
@@ -0,0 +1,51 @@
+local function setup()
+ local gitsigns = require('gitsigns')
+ gitsigns.setup {
+ on_attach = function(bufnr)
+ 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
+ vim.cmd.normal({ ']c', bang = true })
+ else
+ gitsigns.nav_hunk('next')
+ end
+ end)
+
+ map('n', '[c', function()
+ if vim.wo.diff then
+ vim.cmd.normal({ '[c', bang = true })
+ else
+ gitsigns.nav_hunk('prev')
+ end
+ end)
+
+ -- Actions
+ map('n', '<leader>hs', gitsigns.stage_hunk)
+ map('n', '<leader>hr', gitsigns.reset_hunk)
+ map('v', '<leader>hs', function() gitsigns.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end)
+ map('v', '<leader>hr', function() gitsigns.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end)
+ map('n', '<leader>hS', gitsigns.stage_buffer)
+ map('n', '<leader>hu', gitsigns.undo_stage_hunk)
+ map('n', '<leader>hR', gitsigns.reset_buffer)
+ map('n', '<leader>hp', gitsigns.preview_hunk)
+ map('n', '<leader>hb', function() gitsigns.blame_line { full = true } end)
+ map('n', '<leader>tb', gitsigns.toggle_current_line_blame)
+ map('n', '<leader>hd', gitsigns.diffthis)
+ map('n', '<leader>hD', function() gitsigns.diffthis('~') end)
+ map('n', '<leader>td', gitsigns.toggle_deleted)
+
+ -- Text object
+ map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
+ end
+ }
+end
+
+return {
+ setup = setup
+}