gitsigns.nvim icon indicating copy to clipboard operation
gitsigns.nvim copied to clipboard

word_diff bg highlight overridden by linehl bg

Open tarkah opened this issue 2 years ago • 4 comments

Description

If linehl groups (AddLn, ChangeLn, DeleteLn) have a bg assigned to them, it prevents the bg of a word_diff highlight group (AddLnInline, ChangeLnInline, DeleteLnInline) from showing up.

Neovim version

NVIM v0.8.2 Build type: Release LuaJIT 2.1.0-beta3 Compiled by _nixbld0 Features: +acl +iconv +tui See ":help feature-compile"

Operating system and version

Linux & Darwin

Expected behavior

Word diff highlight groups should have a higher priority since they highlight within the line

Actual behavior

The word_diff highlight bg disappears when linehl is enabled and it's highlights have a bg color

Relevant HL groups in demo:

:hi GitSignsChangeLn | hi GitSignsAddLnInline | hi GitSignsChangeLnInline
GitSignsChangeLn xxx guibg=#3b4252
GitSignsAddLnInline xxx guibg=#a3be8c
GitSignsChangeLnInline xxx guibg=#ebcb8b

See below:

gitsigns-linehl

Minimal config

vim.o.packpath = '/tmp/nvim/site'

local plugins = {
  gitsigns = 'https://github.com/lewis6991/gitsigns.nvim',
  -- ADD OTHER PLUGINS _NECESSARY_ TO REPRODUCE THE ISSUE
}

for name, url in pairs(plugins) do
  local install_path = '/tmp/nvim/site/pack/test/start/'..name
  if vim.fn.isdirectory(install_path) == 0 then
    vim.fn.system { 'git', 'clone', '--depth=1', url, install_path }
  end
end

require('gitsigns').setup{
  debug_mode = true, -- You must add this to enable debug messages
  linehl = true,
  numhl = true,
  word_diff = true,
}

Steps to reproduce

  1. Add a bg color to the linehl highlight groups
  2. Add a bg color the word_diff highlight groups
  3. Enable word_diff and see the proper coloring
  4. Enable linehl and see the word_diff coloring dissapear

Gitsigns debug messages

:Gitsigns debug_messages signs.init: Using vimfn signs run_job: git --no-pager --literal-pathspecs -c gc.auto=0 --version fn: Highlight GitSignsAdd is already defined fn: Highlight GitSignsChange is already defined fn: Highlight GitSignsDelete is already defined derive: Deriving GitSignsChangedelete from GitSignsChange derive: Deriving GitSignsTopdelete from GitSignsDelete derive: Deriving GitSignsUntracked from GitSignsAdd fn: Highlight GitSignsAddNr is already defined fn: Highlight GitSignsChangeNr is already defined fn: Highlight GitSignsDeleteNr is already defined derive: Deriving GitSignsChangedeleteNr from GitSignsChangeNr derive: Deriving GitSignsTopdeleteNr from GitSignsDeleteNr derive: Deriving GitSignsUntrackedNr from GitSignsAddNr fn: Highlight GitSignsAddLn is already defined fn: Highlight GitSignsChangeLn is already defined derive: Deriving GitSignsChangedeleteLn from GitSignsChangeLn derive: Deriving GitSignsUntrackedLn from GitSignsAddLn derive: Deriving GitSignsStagedAdd from GitSignsAdd derive: Deriving GitSignsStagedChange from GitSignsChange derive: Deriving GitSignsStagedDelete from GitSignsDelete derive: Deriving GitSignsStagedChangedelete from GitSignsChangedelete derive: Deriving GitSignsStagedTopdelete from GitSignsTopdelete derive: Deriving GitSignsStagedAddNr from GitSignsAddNr derive: Deriving GitSignsStagedChangeNr from GitSignsChangeNr derive: Deriving GitSignsStagedDeleteNr from GitSignsDeleteNr derive: Deriving GitSignsStagedChangedeleteNr from GitSignsChangedeleteNr derive: Deriving GitSignsStagedTopdeleteNr from GitSignsTopdeleteNr derive: Deriving GitSignsStagedAddLn from GitSignsAddLn derive: Deriving GitSignsStagedChangeLn from GitSignsChangeLn derive: Deriving GitSignsStagedDeleteLn from GitSignsDeleteLn derive: Deriving GitSignsStagedChangedeleteLn from GitSignsChangedeleteLn derive: Could not derive GitSignsStagedTopdeleteLn derive: Deriving GitSignsAddPreview from DiffAdd derive: Deriving GitSignsDeletePreview from DiffDelete fn: Highlight GitSignsCurrentLineBlame is already defined derive: Deriving GitSignsAddInline from TermCursor derive: Deriving GitSignsDeleteInline from TermCursor derive: Deriving GitSignsChangeInline from TermCursor fn: Highlight GitSignsAddLnInline is already defined fn: Highlight GitSignsChangeLnInline is already defined fn: Highlight GitSignsDeleteLnInline is already defined derive: Deriving GitSignsDeleteVirtLn from DiffDelete derive: Deriving GitSignsDeleteVirtLnInLine from GitSignsDeleteLnInline run_job: git --no-pager --literal-pathspecs -c gc.auto=0 rev-parse --show-toplevel --absolute-git-dir --abbrev-ref HEAD attach(7): Attaching (trigger=BufRead) run_job: git --no-pager --literal-pathspecs -c gc.auto=0 config user.name run_job: git --no-pager --literal-pathspecs -c gc.auto=0 rev-parse --show-toplevel --absolute-git-dir --abbrev-ref HEAD run_job: git --no-pager --literal-pathspecs -c gc.auto=0 --git-dir /Users/tarkah/dotfiles/.git/modules/nvim --work-tree /Users/tarkah/dotfiles/nvim -c core.quotepath=off ls-files --st age --others --exclude-standard --eol /Users/tarkah/dotfiles/nvim/plugins/gitsigns-nvim.lua watch_gitdir(7): Watching git dir run_job: git --no-pager --literal-pathspecs -c gc.auto=0 --git-dir /Users/tarkah/dotfiles/.git/modules/nvim --work-tree /Users/tarkah/dotfiles/nvim show :0:plugins/gitsigns-nvim.lua update(7): updates: 1, jobs: 6 : Running action 'toggle_linehl' with arguments {} setup_highlights: Highlight GitSignsAdd is already defined setup_highlights: Highlight GitSignsChange is already defined setup_highlights: Highlight GitSignsDelete is already defined setup_highlights: Highlight GitSignsChangedelete is already defined setup_highlights: Highlight GitSignsTopdelete is already defined setup_highlights: Highlight GitSignsUntracked is already defined setup_highlights: Highlight GitSignsAddNr is already defined setup_highlights: Highlight GitSignsChangeNr is already defined setup_highlights: Highlight GitSignsDeleteNr is already defined setup_highlights: Highlight GitSignsChangedeleteNr is already defined setup_highlights: Highlight GitSignsTopdeleteNr is already defined setup_highlights: Highlight GitSignsUntrackedNr is already defined setup_highlights: Highlight GitSignsAddLn is already defined setup_highlights: Highlight GitSignsChangeLn is already defined setup_highlights: Highlight GitSignsChangedeleteLn is already defined setup_highlights: Highlight GitSignsUntrackedLn is already defined setup_highlights: Highlight GitSignsStagedAdd is already defined setup_highlights: Highlight GitSignsStagedChange is already defined setup_highlights: Highlight GitSignsStagedDelete is already defined setup_highlights: Highlight GitSignsStagedChangedelete is already defined setup_highlights: Highlight GitSignsStagedTopdelete is already defined setup_highlights: Highlight GitSignsStagedAddNr is already defined setup_highlights: Highlight GitSignsStagedChangeNr is already defined setup_highlights: Highlight GitSignsStagedDeleteNr is already defined setup_highlights: Highlight GitSignsStagedChangedeleteNr is already defined setup_highlights: Highlight GitSignsStagedTopdeleteNr is already defined setup_highlights: Highlight GitSignsStagedAddLn is already defined setup_highlights: Highlight GitSignsStagedChangeLn is already defined setup_highlights: Highlight GitSignsStagedDeleteLn is already defined setup_highlights: Highlight GitSignsStagedChangedeleteLn is already defined derive: Could not derive GitSignsStagedTopdeleteLn setup_highlights: Highlight GitSignsAddPreview is already defined setup_highlights: Highlight GitSignsDeletePreview is already defined setup_highlights: Highlight GitSignsCurrentLineBlame is already defined setup_highlights: Highlight GitSignsAddInline is already defined setup_highlights: Highlight GitSignsDeleteInline is already defined setup_highlights: Highlight GitSignsChangeInline is already defined setup_highlights: Highlight GitSignsAddLnInline is already defined setup_highlights: Highlight GitSignsChangeLnInline is already defined setup_highlights: Highlight GitSignsDeleteLnInline is already defined setup_highlights: Highlight GitSignsDeleteVirtLn is already defined setup_highlights: Highlight GitSignsDeleteVirtLnInLine is already defined run_job: git --no-pager --literal-pathspecs -c gc.auto=0 --git-dir /Users/tarkah/dotfiles/.git/modules/nvim --work-tree /Users/tarkah/dotfiles/nvim show :0:plugins/gitsigns-nvim.lua update(7): updates: 2, jobs: 7 : Running action 'toggle_word_diff' with arguments {} : Running action 'toggle_word_diff' with arguments {} : Running action 'toggle_linehl' with arguments {} setup_highlights: Highlight GitSignsAdd is already defined setup_highlights: Highlight GitSignsChange is already defined setup_highlights: Highlight GitSignsDelete is already defined setup_highlights: Highlight GitSignsChangedelete is already defined setup_highlights: Highlight GitSignsTopdelete is already defined setup_highlights: Highlight GitSignsUntracked is already defined setup_highlights: Highlight GitSignsAddNr is already defined setup_highlights: Highlight GitSignsChangeNr is already defined setup_highlights: Highlight GitSignsDeleteNr is already defined setup_highlights: Highlight GitSignsChangedeleteNr is already defined setup_highlights: Highlight GitSignsTopdeleteNr is already defined setup_highlights: Highlight GitSignsUntrackedNr is already defined setup_highlights: Highlight GitSignsAddLn is already defined setup_highlights: Highlight GitSignsChangeLn is already defined setup_highlights: Highlight GitSignsChangedeleteLn is already defined setup_highlights: Highlight GitSignsUntrackedLn is already defined setup_highlights: Highlight GitSignsStagedAdd is already defined setup_highlights: Highlight GitSignsStagedChange is already defined setup_highlights: Highlight GitSignsStagedDelete is already defined setup_highlights: Highlight GitSignsStagedChangedelete is already defined setup_highlights: Highlight GitSignsStagedTopdelete is already defined setup_highlights: Highlight GitSignsStagedAddNr is already defined setup_highlights: Highlight GitSignsStagedChangeNr is already defined setup_highlights: Highlight GitSignsStagedDeleteNr is already defined setup_highlights: Highlight GitSignsStagedChangedeleteNr is already defined setup_highlights: Highlight GitSignsStagedTopdeleteNr is already defined setup_highlights: Highlight GitSignsStagedAddLn is already defined setup_highlights: Highlight GitSignsStagedChangeLn is already defined setup_highlights: Highlight GitSignsStagedDeleteLn is already defined setup_highlights: Highlight GitSignsStagedChangedeleteLn is already defined derive: Could not derive GitSignsStagedTopdeleteLn setup_highlights: Highlight GitSignsAddPreview is already defined setup_highlights: Highlight GitSignsDeletePreview is already defined setup_highlights: Highlight GitSignsCurrentLineBlame is already defined setup_highlights: Highlight GitSignsAddInline is already defined setup_highlights: Highlight GitSignsDeleteInline is already defined setup_highlights: Highlight GitSignsChangeInline is already defined setup_highlights: Highlight GitSignsAddLnInline is already defined setup_highlights: Highlight GitSignsChangeLnInline is already defined setup_highlights: Highlight GitSignsDeleteLnInline is already defined setup_highlights: Highlight GitSignsDeleteVirtLn is already defined setup_highlights: Highlight GitSignsDeleteVirtLnInLine is already defined run_job: git --no-pager --literal-pathspecs -c gc.auto=0 --git-dir /Users/tarkah/dotfiles/.git/modules/nvim --work-tree /Users/tarkah/dotfiles/nvim show :0:plugins/gitsigns-nvim.lua update(7): updates: 3, jobs: 8 : Running action 'debug_messages' with arguments {} : Running action 'dump_cache' with arguments {} : Running action 'debug_messages' with arguments {}

tarkah avatar Jan 31 '23 04:01 tarkah

Wow, I have been strugglng with this bug the past few months, and I just now realized it was the word_diff highlight bug causing this.

ZTatman avatar Jun 18 '24 19:06 ZTatman

Are there any workarounds? 🙏

tomaszferens avatar Jul 20 '24 12:07 tomaszferens

No, this is how Neovim works.

lewis6991 avatar Jul 20 '24 12:07 lewis6991

Are there any workarounds? 🙏

Not any that I know of, tbh I have just disabled the word_diff option altogether, its just easier not dealing with it at all.

ZTatman avatar Aug 06 '24 13:08 ZTatman

Same issue as #1115. Upstream issue not worth fixing here.

lewis6991 avatar Jan 20 '25 12:01 lewis6991

A ad-hoc patch: https://github.com/shaobosong/gitsigns.nvim/commit/87b662f688e8a67287e7516f277386ea9abb5c49

shaobosong avatar Jun 14 '25 03:06 shaobosong