From f831c3481300f116f9e3b181dd22432b415d5a75 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 30 Dec 2022 13:52:08 +0530 Subject: [PATCH] Update the FAQ on vim with a comprehensive set of settings needed to get it to work with modern terminals --- docs/faq.rst | 69 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index 5bd4211ea..2bc095b0c 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -27,17 +27,70 @@ turned off for specific symbols using :opt:`narrow_symbols`. Using a color theme with a background color does not work well in vim? ----------------------------------------------------------------------- -First make sure you have not changed the :envvar:`TERM` environment variable, it -should be ``xterm-kitty``. vim uses *background color erase* even if the -terminfo file does not contain the ``bce`` capability. This is a -`bug in vim `__. You -can work around it by adding the following to your vimrc:: +Sadly, vim has very poor out-of-the-box detection for modern terminal features. +Furthermore, it `recently broke detection even more `__. +It kind of, but not really, supports terminfo, except it overrides it with its own hard-coded +values when it feels like it. Worst of all, it has no ability to detect modern +features not present in terminfo, at all, even security sensitive ones like +bracketed paste. +Thankfully, probably as a consequence of this lack of detection, vim allows users to +configure these low level details. So, to make vim work well with any modern +terminal, including kitty, add the following to your :file:`~/.vimrc`. + +.. code-block:: vim + + " Mouse support + set mouse=a + set ttymouse=sgr + set balloonevalterm + " Styled and colored underline support + let &t_AU = "\e[58:5:%dm" + let &t_8u = "\e[58:2:%lu:%lu:%lum" + let &t_Us = "\e[4:2m" + let &t_Cs = "\e[4:3m" + let &t_ds = "\e[4:4m" + let &t_Ds = "\e[4:5m" + let &t_Ce = "\e[4:0m" + " Strikethrough + let &t_Ts = "\e[9m" + let &t_Te = "\e[29m" + " Truecolor support + let &t_8f = "\e[38:2:%lu:%lu:%lum" + let &t_8b = "\e[48:2:%lu:%lu:%lum" + let &t_RF = "\e]10;?\e\\" + let &t_RB = "\e]11;?\e\\" + " Bracketed paste + let &t_BE = "\e[?2004h" + let &t_BD = "\e[?2004l" + let &t_PS = "\e[200~" + let &t_PE = "\e[201~" + " Cursor control + let &t_RC = "\e[?12$p" + let &t_SH = "\e[%d q" + let &t_RS = "\eP$q q\e\\" + let &t_SI = "\e[5 q" + let &t_SR = "\e[3 q" + let &t_EI = "\e[1 q" + let &t_VS = "\e[?12l" + " Focus tracking + let &t_fe = "\e[?1004h" + let &t_fd = "\e[?1004l" + execute "set =\[I" + execute "set =\[O" + " Window title + let &t_ST = "\e[22;2t" + let &t_RT = "\e[23;2t" + + " vim hardcodes background color erase even if the terminfo file does + " not contain bce. This causes incorrect background rendering when + " using a color theme with a background color in terminals such as + " kitty that do not support background color erase. let &t_ut='' -See :doc:`here ` for why |kitty| does not support background color -erase. - +These settings must be placed **before** setting the ``colorscheme``. It is +also important that the value of the vim ``term`` variable is not changed +after these settings. I get errors about the terminal being unknown or opening the terminal failing when SSHing into a different computer? -----------------------------------------------------------------------------------------------------------------------