为什么默认 vim 的背景选项在 gnome-terminal 和 gnu-screen 中 运行 时不同?
Why is the default vim's background option is differrent when run in gnome-terminal and gnu-screen?
我正在使用 Ubuntu 16.04 LTS,安装了 vim 7.4 和屏幕。我的问题是为什么当我在默认 ubuntu 终端中打开 vim 时 background
选项是 dark
而在 gnu-screen 中打开它时它是 light
。
在这些终端中打开时,您可以看到语法突出显示的细微差别。
它是从哪里获得这些值的?
让 vim 猜测背景值都给出 light
。 (即 :set bg& bg?
)
我已经深入研究了 vim 文件,但没有发现任何嫌疑人。
也许它位于 vim 的配置文件中,但我还没有发现,或者是否有另一种机制可以在 vim 中设置默认背景选项?
总结
$ vim
:set bg?
background=dark
:set bg&
:set bg?
background=light
:q
$ screen
$ vim
:set bg?
background=light ???
:set bg&
:set bg?
background=light
来自:help 'background'
:
[...]
For MS-DOS, Windows and OS/2 the default is "dark".
For other systems "dark" is used when 'term' is "linux",
"screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
background. Otherwise the default is "light".
[...]
vim 使用 xterm 指令集中的转义序列询问背景颜色是什么,您可以在 block in term.c
开头的注释
中看到
/* Check for background color response from the terminal:
*
* {lead}11;rgb:{rrrr}/{gggg}/{bbbb}{tail}
*
* {lead} can be <Esc>] or OSC
* {tail} can be '[=10=]7', <Esc>\ or STERM.
最终生成一些代码(我建议重写...):
{/* 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);
在 mid-2015 中添加:
commit b5c3265521749fda81ae4b052de35a0d1209cf50
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jun 25 17:03:36 2015 +0200
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)
xterm patch #94(1999 年 3 月)添加了查询颜色的控制序列:
extend dynamic colors control sequences to allow users to determine the colors and font which are currently active.
VTE 的开发人员在 2014 年初复制了该功能(参见 #567444)。
但是 GNU screen 无法识别序列(或其响应),因此不允许它通过。
顺便说一下,vim 可以通过不止一种方式做到这一点。我检查了它与 strace
.
一起使用的方法
我正在使用 Ubuntu 16.04 LTS,安装了 vim 7.4 和屏幕。我的问题是为什么当我在默认 ubuntu 终端中打开 vim 时 background
选项是 dark
而在 gnu-screen 中打开它时它是 light
。
在这些终端中打开时,您可以看到语法突出显示的细微差别。
它是从哪里获得这些值的?
让 vim 猜测背景值都给出 light
。 (即 :set bg& bg?
)
我已经深入研究了 vim 文件,但没有发现任何嫌疑人。
也许它位于 vim 的配置文件中,但我还没有发现,或者是否有另一种机制可以在 vim 中设置默认背景选项?
总结
$ vim
:set bg?
background=dark
:set bg&
:set bg?
background=light
:q
$ screen
$ vim
:set bg?
background=light ???
:set bg&
:set bg?
background=light
来自:help 'background'
:
[...]
For MS-DOS, Windows and OS/2 the default is "dark".
For other systems "dark" is used when 'term' is "linux",
"screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
background. Otherwise the default is "light".
[...]
vim 使用 xterm 指令集中的转义序列询问背景颜色是什么,您可以在 block in term.c
开头的注释
/* Check for background color response from the terminal:
*
* {lead}11;rgb:{rrrr}/{gggg}/{bbbb}{tail}
*
* {lead} can be <Esc>] or OSC
* {tail} can be '[=10=]7', <Esc>\ or STERM.
最终生成一些代码(我建议重写...):
{/* 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);
在 mid-2015 中添加:
commit b5c3265521749fda81ae4b052de35a0d1209cf50
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jun 25 17:03:36 2015 +0200
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)
xterm patch #94(1999 年 3 月)添加了查询颜色的控制序列:
extend dynamic colors control sequences to allow users to determine the colors and font which are currently active.
VTE 的开发人员在 2014 年初复制了该功能(参见 #567444)。
但是 GNU screen 无法识别序列(或其响应),因此不允许它通过。
顺便说一下,vim 可以通过不止一种方式做到这一点。我检查了它与 strace
.