require('gitsigns').setup { status_formatter = nil, sign_priority = 6, update_debounce = 100, max_file_length = 10000, signcolumn = true, numhl = false, linehl = false, word_diff = false, attach_to_untracked = false, current_line_blame = false, current_line_blame_opts = { virt_text = true, virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' delay = 1000, }, watch_gitdir = { interval = 1000, follow_files = true }, current_line_blame_formatter_opts = { relative_time = false }, preview_config = { -- Options passed to nvim_open_win border = 'single', style = 'minimal', relative = 'cursor', row = 0, col = 1 }, yadm = { enable = false }, signs = { add = { hl = 'GitSignsAdd' , text = '│', numhl='GitSignsAddNr' , linehl='GitSignsAddLn' }, change = { hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' }, delete = { hl = 'GitSignsDelete', text = '_', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' }, topdelete = { hl = 'GitSignsDelete', text = '‾', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' }, changedelete = { hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' }, }, 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 map('n', ']c', function() if vim.wo.diff then return ']c' end vim.schedule(function() gs.next_hunk() end) return '' end, {expr=true}) map('n', '[c', function() if vim.wo.diff then return '[c' end vim.schedule(function() gs.prev_hunk() end) return '' end, {expr=true}) map('n', 'hp', gs.preview_hunk) map('n', 'hP', gs.preview_hunk_inline) map('n', 'hl', gs.setloclist) map('n', 'hq', gs.setqflist) map('n', 'hQ', function() gs.setqflist('attached') end) map('n', 'ht', gs.toggle_signs) map('n', 'hu', gs.undo_stage_hunk) map({'n', 'v'}, 'hs', ':Gitsigns stage_hunk') map({'n', 'v'}, 'hr', ':Gitsigns reset_hunk') map({'o', 'x'}, 'ih', ':Gitsigns select_hunk') end }