Die Standardeinstellung ist im vim-Quellcode (in c-Programmiersprache geschrieben) fest (codiert). Es war fix nicht "dunkel" in GUI-Varianten von VIM mit "linux" TERM seit Version 6.1.136 zu verwenden, und es hilft mir eigentlichen Code zu finden:
http://ftp.twaren.net/vim/patches/6.1.136
Patch 6.1.136
Problem: When $TERM is "linux" the default for 'background' is "dark", even
though the GUI uses a light background. (Hugh Allen)
Solution: Don't mark the option as set when defaulting to "dark" for the
linux console. Also reset 'background' to "light" when the GUI
has a light background.
Files: src/option.c
Die Logik ist hier Standardwerte: https://fossies.org/dox/vim-7.4/option_8c_source.html#l00566
563 {"background", "bg", P_STRING|P_VI_DEF|P_RCLR,
564 (char_u *)&p_bg, PV_NONE,
565 {
566 #if (defined(MSDOS) || defined(OS2) || defined(WIN3264)) && !defined(FEAT_GUI)
567 (char_u *)"dark",
568 #else
569 (char_u *)"light",
570 #endif
Detect Terminal Hintergrund: https://fossies.org/dox/vim-7.4/option_8c_source.html#l03754
3725 /* For DOS console the default is always black. */
3726 #if !((defined(MSDOS) || defined(OS2) || defined(WIN3264)) && !defined(FEAT_GUI))
3727 /*
3728 * If 'background' wasn't set by the user, try guessing the value,
3729 * depending on the terminal name. Only need to check for terminals
3730 * with a dark background, that can handle color.
3731 */
3732 idx = findoption((char_u *)"bg");
3733 if (idx >= 0 && !(options[idx].flags & P_WAS_SET)
3734 && *term_bg_default() == 'd')
3735 {
3736 set_string_option_direct(NULL, idx, (char_u *)"dark", OPT_FREE, 0);
3737 /* don't mark it as set, when starting the GUI it may be
3738 * changed again */
3739 options[idx].flags &= ~P_WAS_SET;
3740 }
3741 #endif
3754 /*
3755 * Return "dark" or "light" depending on the kind of terminal.
3756 * This is just guessing! Recognized are:
3757 * "linux" Linux console
3758 * "screen.linux" Linux console with screen
3759 * "cygwin" Cygwin shell
3760 * "putty" Putty program
3761 * We also check the COLORFGBG environment variable, which is set by
3762 * rxvt and derivatives. This variable contains either two or three
3763 * values separated by semicolons; we want the last value in either
3764 * case. If this value is 0-6 or 8, our background is dark.
3765 */
3766 static char_u *
3767 term_bg_default()
3768 {
3769 #if defined(MSDOS) || defined(OS2) || defined(WIN3264)
3770 /* DOS console nearly always black */
3771 return (char_u *)"dark";
3772 #else
3773 char_u *p;
3774
3775 if (STRCMP(T_NAME, "linux") == 0
3776 || STRCMP(T_NAME, "screen.linux") == 0
3777 || STRCMP(T_NAME, "cygwin") == 0
3778 || STRCMP(T_NAME, "putty") == 0
3779 || ((p = mch_getenv((char_u *)"COLORFGBG")) != NULL
3780 && (p = vim_strrchr(p, ';')) != NULL
3781 && ((p[1] >= '0' && p[1] <= '6') || p[1] == '8')
3782 && p[2] == NUL))
3783 return (char_u *)"dark";
3784 return (char_u *)"light";
3785 #endif
3786 }
GUI fix:
4044 gui_bg_default()
4045 {
4046 if (gui_get_lightness(gui.back_pixel) < 127)
4047 return (char_u *)"dark";
4048 return (char_u *)"light";
4049 }
UPDATE: Für vim-1689.07.04 (Debian/Ubuntu) Ich vim-Paket neu erstellt mit Informationen Debuggen (-O2 -g
Standardoption; vor dem Streifen und packen in deb) und lief TERM=xterm gdb --args vim-7.4.1689/src/vim-basic/vim -e
mit watch p_bg
. Erster Wechsel von p_bg
war von term_bg_default()
-light
, und zweitens ist von ... main
: may_req_termresponse()
(wenn FEAT_TERMRESPONSE definiert wurde) ->vpeekc_nomap
->vpeekc
->vgetorpeek
->check_termcode
->set_option_value("bg",..)
->set_string_option
.
https://github.com/vim/vim/blob/54c10ccf9274880e83093a99690e7bfa9a2d2fa8/src/term.c
Linie 3.302-may_req_bg_color()
Farbe, genannt von main.c
kurz nach starttermcap()
/log Meldung "termcap starten"; I hinzugefügt vorverarbeiteten Definition der Anfrage:
/*
* Similar to requesting the version string: Request the terminal background
* color when it is the right moment.
*/
void
may_req_bg_color(void)
...
{(int)KS_RBG, "\033]11;?\007",
{(int)KS_RBG, "[RBG]"},
Linie 4286 - hand Antwort von Termcap Anfrage
check_termcode(....
/* Check for background color response from the terminal:
*
* {lead}11;rgb:{rrrr}/{gggg}/{bbbb}{tail}
*
* {lead} can be <Esc>] or OSC
* {tail} can be '\007', <Esc>\ or STERM.
*
* Consume any code that starts with "{lead}11;", it's also
* possible that "rgba" is following.
*/
if (i - j >= 21 && STRNCMP(tp + j + 3, "rgb:", 4) == 0
&& tp[j + 11] == '/' && tp[j + 16] == '/'
&& !option_was_set((char_u *)"bg"))
{/* TODO: don't set option when already the right value */
LOG_TR("Received RBG");
rbg_status = RBG_GOT;
set_option_value((char_u *)"bg", 0L, (char_u *)(
(3 * '6' < tp[j+7] + tp[j+12] + tp[j+17])
? "light" : "dark"), 0);
reset_option_was_set((char_u *)"bg");
von 7,4 zugegeben.757 Patch http://ftp.vim.org/vim/patches/7.4/7.4.757
Patch 7.4.757
Problem: Cannot detect the background color of a terminal.
Solution: Add T_RBG to request the background color if possible. (Lubomir
Rintel)
Files: src/main.c, src/term.c, src/term.h, src/proto/term.pro
#define T_RBG (term_str(KS_RBG)) /* request background RGB */
Ihr tmux/Bildschirm kann nicht implementieren '[RBG] Anfrage; überprüfen, indem Sie in xterm und in tmux laufen und vergleichen Ausgänge:
echo -e '\033]11;?\007'
Sie COLORFGBG definieren kann (und es gab Ungeziefer darüber in neovim: https://github.com/neovim/neovim/issues/2764) Es gibt Fehlerbericht für gnome-terminal es einrichten https://bugzilla.gnome.org/show_bug.cgi?id=733423
verschiedene Terminals, einschließlich urxvt und konsole, stellten eine Umgebungsvariable „COLORFGBG“ Anwendungen zu ermöglichen, die Vordergrund- und Hintergrundfarben zu erkennen. Verschiedene Programme, wie z. B. vim, verwenden dies, um zu bestimmen, ob ein Farbschema verwendet werden soll, das am besten auf hellem oder dunklem Hintergrund funktioniert. Bitte überlege, diese Variable auch in gnome-terminal zu setzen.
Egmont hat einige Option im Bug https://bugzilla.gnome.org/show_bug.cgi?id=733423 in Ihrem "vimrc" (~/.vimrc
) oder global auf Ihrem O durch, indem ist /usr/share/vim/vimrc
oder in vim Quellen COLORFGBG mit Bashrc
Sie ändern einstellen können Neu kompilieren der benutzerdefinierten Version oder in vim-Quellen, indem ein Fehler an Vim-Autoren gemeldet/Patches gesendet werden.
Die Dokumentation "bg" Teil der Logik beschreibt und gibt Lösungen für vimrc: http://vimdoc.sourceforge.net/htmldoc/options.html# 'bg'
Wenn mit 'Hintergrund' auf den Standardwert einstellen:
:set background&
Vim wird den Wert erraten. In der GUI sollte dies korrekt funktionieren, in anderen Fällen kann Vim den richtigen Wert nicht erraten.
Beim Starten der GUI wird der Standardwert für 'background
' "light"
sein. Wenn der Wert nicht in .gvimrc
eingestellt ist und Vim erkennt, dass der Hintergrund tatsächlich ziemlich dunkel ist, wird "background
" auf "dark"
gesetzt. ....
Normalerweise würde diese Option in der Datei .vimrc
festgelegt werden. Möglicherweise abhängig vom Namen des Terminals. Beispiel:
:if &term == "pcterm"
: set background=dark
:endif
Wenn diese Option eingestellt ist, ändern sich die Standardeinstellungen für die Lichtergruppen wird. Um andere Einstellungen zu verwenden, setzen Sie ":highlight
" Befehle NACH die Einstellung der Option 'Hintergrund'.
Was ist Ihr Betriebssystem? Ist es debian/ubuntu? Die Einstellung kann in vim globalen RC-Skripten (in '/ usr/share/vim') oder in Quellen von vim oder in beiden definiert werden. Ich kann versuchen, aktuelle Ubuntu (16.04) vim Quellen zu überprüfen, es gibt Erwähnung in debian/changelog (Upstream - Patch) "6.1.136: Wenn $ TERM" linux "ist, ist der Standard für 'Hintergrund'" dunkel ", obwohl der GUI verwendet einen hellen Hintergrund "http://ftp.twaren.net/vim/patches/6.1.136 – osgx