diff options
| author | Mosder <xmosder12@gmail.com> | 2026-06-10 02:24:31 +0200 |
|---|---|---|
| committer | Mosder <xmosder12@gmail.com> | 2026-06-10 02:24:31 +0200 |
| commit | 1f2824b912b22a687fb0f1c56f82198128bef1ca (patch) | |
| tree | a22c4425c43fcd111c441531b21e275b1fd97f3f /common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua | |
| parent | a7fab53f802c8bacfce66fb3455145835e231460 (diff) | |
added and updated a lot of configs + refactored it to be more accessible
Diffstat (limited to 'common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua')
| -rw-r--r-- | common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua b/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua new file mode 100644 index 0000000..b7e40a8 --- /dev/null +++ b/common/home/mosder/.config/nvim/lua/kickstart/plugins/gitsigns.lua @@ -0,0 +1,57 @@ +-- Adds git related signs to the gutter, as well as utilities for managing changes +-- NOTE: gitsigns is already included in init.lua but contains only the base +-- config. This will add also the recommended keymaps. + +vim.pack.add { 'https://github.com/lewis6991/gitsigns.nvim' } + +require('gitsigns').setup { + on_attach = function(bufnr) + local gitsigns = require '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 + vim.cmd.normal { ']c', bang = true } + else + gitsigns.nav_hunk 'next' + end + end, { desc = 'Jump to next git [c]hange' }) + + map('n', '[c', function() + if vim.wo.diff then + vim.cmd.normal { '[c', bang = true } + else + gitsigns.nav_hunk 'prev' + end + end, { desc = 'Jump to previous git [c]hange' }) + + -- Actions + -- visual mode + map('v', '<leader>hs', function() gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [s]tage hunk' }) + map('v', '<leader>hr', function() gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'git [r]eset hunk' }) + -- normal mode + map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) + map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' }) + map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' }) + map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' }) + map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' }) + map('n', '<leader>hi', gitsigns.preview_hunk_inline, { desc = 'git preview hunk [i]nline' }) + map('n', '<leader>hb', function() gitsigns.blame_line { full = true } end, { desc = 'git [b]lame line' }) + map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' }) + map('n', '<leader>hD', function() gitsigns.diffthis '@' end, { desc = 'git [D]iff against last commit' }) + map('n', '<leader>hQ', function() gitsigns.setqflist 'all' end, { desc = 'git hunk [Q]uickfix list (all files in repo)' }) + map('n', '<leader>hq', gitsigns.setqflist, { desc = 'git hunk [q]uickfix list (all changes in this file)' }) + -- Toggles + map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' }) + map('n', '<leader>tw', gitsigns.toggle_word_diff, { desc = '[T]oggle git intra-line [w]ord diff' }) + + -- Text object + map({ 'o', 'x' }, 'ih', gitsigns.select_hunk) + end, +} |
