Git Integration
gitsigns.nvim: Inline Git Information
-- lua/plugins/git.lua
return {
{
'lewis6991/gitsigns.nvim',
event = { 'BufReadPre', 'BufNewFile' },
opts = {
signs = {
add = { text = '│' },
change = { text = '│' },
delete = { text = '_' },
topdelete = { text = '‾' },
changedelete = { text = '~' },
},
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
local map = function(mode, l, r, desc)
vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc })
end
-- Navigation between hunks
map('n', ']h', gs.next_hunk, 'Next hunk')
map('n', '[h', gs.prev_hunk, 'Previous hunk')
-- Actions
map('n', '<leader>hs', gs.stage_hunk, 'Stage hunk')
map('n', '<leader>hr', gs.reset_hunk, 'Reset hunk')
map('v', '<leader>hs', function()
gs.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, 'Stage selected hunk')
map('v', '<leader>hr', function()
gs.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, 'Reset selected hunk')
map('n', '<leader>hS', gs.stage_buffer, 'Stage buffer')
map('n', '<leader>hu', gs.undo_stage_hunk, 'Undo stage hunk')
map('n', '<leader>hR', gs.reset_buffer, 'Reset buffer')
map('n', '<leader>hp', gs.preview_hunk, 'Preview hunk')
map('n', '<leader>hb', function()
gs.blame_line({ full = true })
end, 'Blame line')
map('n', '<leader>tb', gs.toggle_current_line_blame, 'Toggle line blame')
map('n', '<leader>hd', gs.diffthis, 'Diff this')
-- Text object: select hunk
map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', 'Select hunk')
end,
},
},
}Key Features
fugitive.vim or neogit: Git Commands
vim-fugitive (Works in Vim and Neovim)
Command
What it does
neogit (Neovim-native, Magit-inspired)
diffview.nvim: Visual Diffs
Common Workflows
Git Workflow in Neovim
Useful Git Keybindings Summary
Action
Keybinding
Plugin
Summary
Exercises
Last updated
Was this helpful?