From 431566d260ba139cdffee5770737af47745537ee Mon Sep 17 00:00:00 2001 From: Rob Watson Date: Sun, 1 Oct 2023 08:43:03 +0200 Subject: [PATCH] feat(nvim): migrate to gitsigns.nvim --- nvimrc | 14 ++---- vim/lua/gitsigns_config.lua | 93 +++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 vim/lua/gitsigns_config.lua diff --git a/nvimrc b/nvimrc index 2201011..ccdde5e 100644 --- a/nvimrc +++ b/nvimrc @@ -182,7 +182,6 @@ endfunction nnoremap as :Git nnoremap ab :Git blame nnoremap ac :Commits -nnoremap ah :GitGutterLineHighlightsToggle nnoremap aY :call CopyGitURLToLineOrRange() vnoremap aY :call CopyGitURLToLineOrRange() nnoremap ao :call OpenGitURLToLineOrRange() @@ -242,15 +241,10 @@ packadd! nvim-web-devicons " https://github.com/nvim-tree/nvim-web-devicons.git lua require "lightline_config" -" vim-gitgutter configuration -packadd! vim-gitgutter " https://github.com/airblade/vim-gitgutter.git -set signcolumn=yes -nmap ]h (GitGutterNextHunk) -nmap [h (GitGutterPrevHunk) -omap ih (GitGutterTextObjectInnerPending) -omap ah (GitGutterTextObjectOuterPending) -xmap ih (GitGutterTextObjectInnerVisual) -xmap ah (GitGutterTextObjectOuterVisual) +" gitsigns.nvim +packadd! gitsigns.nvim " https://github.com/lewis6991/gitsigns.nvim.git + +lua require "gitsigns_config" " enable inline vim highlighting: let g:vimsyn_embed= 'lPr' diff --git a/vim/lua/gitsigns_config.lua b/vim/lua/gitsigns_config.lua new file mode 100644 index 0000000..f591080 --- /dev/null +++ b/vim/lua/gitsigns_config.lua @@ -0,0 +1,93 @@ +require("gitsigns").setup({ + signs = { + add = { text = "│" }, + change = { text = "~" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "%" }, + untracked = { text = "┆" }, + }, + signcolumn = true, + numhl = false, + linehl = false, + word_diff = false, + watch_gitdir = { + follow_files = true, + }, + attach_to_untracked = true, + current_line_blame = true, + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", + delay = 1000, + ignore_whitespace = false, + }, + current_line_blame_formatter = ", - ", + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, + max_file_length = 40000, + preview_config = { + border = "single", + style = "minimal", + relative = "cursor", + row = 0, + col = 1, + }, + yadm = { + enable = false, + }, + 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", "]h", function() + if vim.wo.diff then + return "]h" + end + vim.schedule(function() + gs.next_hunk() + end) + return "" + end, { expr = true }) + + map("n", "[h", function() + if vim.wo.diff then + return "[h" + end + vim.schedule(function() + gs.prev_hunk() + end) + return "" + end, { expr = true }) + + map("n", "hs", gs.stage_hunk) + map("n", "hr", gs.reset_hunk) + map("v", "hs", function() + gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end) + map("v", "hr", function() + gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end) + map("n", "hS", gs.stage_buffer) + map("n", "hu", gs.undo_stage_hunk) + map("n", "hR", gs.reset_buffer) + map("n", "hp", gs.preview_hunk) + map("n", "hb", function() + gs.blame_line({ full = true }) + end) + map("n", "tb", gs.toggle_current_line_blame) + map("n", "hd", gs.diffthis) + map("n", "hD", function() + gs.diffthis("~") + end) + map("n", "td", gs.toggle_deleted) + + map({ "o", "x" }, "ih", ":Gitsigns select_hunk") + end, +})