ale
ale copied to clipboard
Virtualtext at the end of a line not showing as comment after colorscheme reload
Information
VIM version VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Oct 01 2023 12:12:50) Included patches: 1-1968
Operating System: $ uname -r 6.5.5-arch1-1
What went wrong
When the colorscheme gets reloaded, virtualtext loses its "comment" highlighting.
Clean vim loaded:
reload colorscheme
I was able to get around this partially by adding the following to the function that manually toggles background (and thus reloads the colorscheme):
function! s:TogBG()
let &background = ( &background == "dark"? "light" : "dark" )
highlight link ALEVirtualTextError Comment
highlight link ALEVirtualTextStyleError ALEVirtualTextError
highlight link ALEVirtualTextWarning Comment
highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning
highlight link ALEVirtualTextInfo ALEVirtualTextWarning
hi ALEError cterm=undercurl
hi ALEWarning cterm=undercurl
endfunction
However, this doesn't solve the problem when the colorscheme is reloaded automatically, for example, when my terminal background gets changed and vim follows that change.
I'm also suspicious that if these highlight groups get somehow reset, then other non-visible items may also silently reset.
In fact, I also have to add ALEError and ALEWarning cterm=undercurl in the manual function, too, because they get reset to underline.
Reproducing the bug
- open vim (if the terminal background is light)
- set background=dark
- or the other way around (if the background is dark, set it to light)
And the virtualtext at the end of the cursor is no longer italic and light (see figures above)
:ALEInfo
Linter Variables: " Press Space to read :help for a setting let g:ale_python_auto_pipenv = 0 let g:ale_python_auto_poetry = 0 let g:ale_python_auto_virtualenv = 0 let g:ale_python_mypy_auto_pipenv = 0 let g:ale_python_mypy_auto_poetry = 0 let g:ale_python_mypy_executable = 'mypy' let g:ale_python_mypy_ignore_invalid_syntax = 0 let g:ale_python_mypy_options = '' let g:ale_python_mypy_show_notes = 1 let g:ale_python_mypy_use_global = 0 let g:ale_python_pyright_auto_pipenv = 0 let g:ale_python_pyright_auto_poetry = 0 let g:ale_python_pyright_config = {} let g:ale_python_pyright_executable = 'pyright-langserver' let g:ale_python_pyright_use_global = 0 let g:ale_python_ruff_auto_pipenv = 0 let g:ale_python_ruff_auto_poetry = 0 let g:ale_python_ruff_change_directory = 1 let g:ale_python_ruff_executable = 'ruff' let g:ale_python_ruff_options = '' let g:ale_python_ruff_use_global = 0
Global Variables: " Press Space to read :help for a setting let g:ale_cache_executable_check_failures = v:null let g:ale_change_sign_column_color = 0 let g:ale_command_wrapper = '' let g:ale_completion_delay = 100 let g:ale_completion_enabled = 1 let g:ale_completion_max_suggestions = 50 let g:ale_disable_lsp = 'auto' let g:ale_echo_cursor = 1 let g:ale_echo_msg_error_str = 'Error' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' let g:ale_echo_msg_info_str = 'Info' let g:ale_echo_msg_warning_str = 'Warning' let g:ale_enabled = 1 let g:ale_fix_on_save = 1 let g:ale_fixers = {} let b:ale_fixers = ['black', 'ruff', 'isort'] let g:ale_history_enabled = 1 let g:ale_info_default_mode = 'preview' let g:ale_history_log_output = 1 let g:ale_keep_list_window_open = 0 let g:ale_lint_delay = 200 let g:ale_lint_on_enter = 1 let g:ale_lint_on_filetype_changed = 1 let g:ale_lint_on_insert_leave = 1 let g:ale_lint_on_save = 1 let g:ale_lint_on_text_changed = 'normal' let g:ale_linter_aliases = {} let g:ale_linters = {} let b:ale_linters = ['mypy', 'ruff', 'pyright'] let g:ale_linters_explicit = 0 let g:ale_linters_ignore = {} let g:ale_list_vertical = 0 let g:ale_list_window_size = 10 let g:ale_loclist_msg_format = '[%linter%] %s [%severity%]' let g:ale_max_buffer_history_size = 20 let g:ale_max_signs = -1 let g:ale_maximum_file_size = v:null let g:ale_open_list = 0 let g:ale_pattern_options = v:null let g:ale_pattern_options_enabled = v:null let g:ale_root = {} let g:ale_set_balloons = 0 let g:ale_set_highlights = 1 let g:ale_set_loclist = 1 let g:ale_set_quickfix = 0 let g:ale_set_signs = 1 let g:ale_sign_column_always = 0 let g:ale_sign_error = 'E' let g:ale_sign_info = 'I' let g:ale_sign_offset = 1000000 let g:ale_sign_style_error = 'E' let g:ale_sign_style_warning = 'W' let g:ale_sign_warning = 'W' let g:ale_sign_highlight_linenrs = 0 let g:ale_type_map = {} let g:ale_use_neovim_diagnostics_api = 0 let g:ale_use_global_executables = v:null let g:ale_virtualtext_cursor = 'current' let g:ale_warn_about_trailing_blank_lines = 1 let g:ale_warn_about_trailing_whitespace = 1
I would like to fix this, but I'm not sure how to fix it.
Confirming that adding the following to vimrc seems to do the trick:
function! TogBG() abort
highlight link ALEVirtualTextError Comment
highlight link ALEVirtualTextStyleError ALEVirtualTextError
highlight link ALEVirtualTextWarning Comment
highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning
highlight link ALEVirtualTextInfo ALEVirtualTextWarning
endfunction
autocmd ColorScheme * call TogBG()