- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Vim 能够正确猜测 Xterm 的背景颜色以设置其内部选项 bg
至 dark
或 white
根据终端的一个。 Vim 能够正确地做到这一点 只有当TERM
设置为 xterm
{, -color
, -256color
} 或 linux
但没有其他人喜欢 tmux
或 screen
.
Vim 怎么猜的?
我发现大多数人都强制设置 background
选项 dark
或 light
在他们的 .vimrc
文件;但我想要一种方法来猜测与 Vim 相同的方式,独立于终端是 xterm
, tmux
, screen
.
最佳答案
默认设置在 Vim 源代码(用 C 编程语言编写)中定义(硬编码)。自 6.1.136 版以来,有一个修复程序可以在带有“linux”TERM 的 Vim 的 GUI 变体中不使用“dark”,它可以帮助我找到实际代码:
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
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
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 }
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 }
-O2 -g
默认选项;在剥离并打包到 deb 之前)并运行
TERM=xterm gdb --args vim-7.4.1689/src/vim-basic/vim -e
与
watch p_bg
.
p_bg
的第一次变更来自
term_bg_default()
至
light
,第二个来自...
main
:
may_req_termresponse()
(如果定义了 FEAT_TERMRESPONSE)->
vpeekc_nomap
->
vpeekc
->
vgetorpeek
->
check_termcode
->
set_option_value("bg",..)
->
set_string_option
.
may_req_bg_color()
颜色,来自
main.c
紧随其后
starttermcap()
/日志消息“启动 termcap”;我添加了请求的预处理定义:
/*
* 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]"},
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");
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 */
echo -e '\033]11;?\007'
Various terminals, including urxvt and konsole, set an environment variable "COLORFGBG" to allow applications to detect the foreground and background colors. Various programs, such as Vim, use this to determine whether to use a color scheme that works best on a light or dark background. Please consider setting this variable in gnome-terminal as well.
COLORFGBG
与
.bashrc
.
~/.vimrc
)中更改此设置,或者通过更改
/usr/share/vim/vimrc
在您的操作系统上全局更改此设置。或通过重新编译自定义版本在 vim 源中或通过向 Vim 作者报告错误/向他们发送补丁在 Vim 源中。
When setting 'background' to the default value with:
:set background&
Vim will guess the value. In the GUI this should work correctly, in other cases Vim might not be able to guess the right value.
When starting the GUI, the default value for '
background
' will be"light"
. When the value is not set in the.gvimrc
, and Vim detects that the background is actually quite dark, 'background
' is set to"dark"
. ....Normally this option would be set in the
.vimrc
file. Possibly depending on the terminal name. Example::if &term == "pcterm"
: set background=dark
:endifWhen this option is set, the default settings for the highlight groups will change. To use other settings, place "
:highlight
" commands AFTER the setting of the 'background' option.
关于vim - Vim 如何猜测 xterm 上的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38287889/
我有 虚拟机 在 马克 & CentOS .所以,我看到人们在写 -xterm_clipboard , -lua , ... 有没有一种简单的方法来安装它?或者我们必须一个一个地启用选项并编译/重新编
默认情况下,Vim 在 ~/.vim 中寻找插件和其他东西。 有没有办法告诉 Vim 在 ~/.other_folder 中搜索插件等,并强制它完全忽略 ~/.vim? 最佳答案 Vim 使用来自 '
我正在尝试处理一系列文件。我注意到从命令行(即 ex 模式)运行特定命令时存在差异。例如。 $cat poo.txt big red dog small black cat $vim -c "2,$g
我正在尝试将所有与 vim 相关的文件/插件整合到 ~/.vim 中文件夹,以便我可以将其转储到 github 并开始使用病原体。但是,现在我所有的 vim 插件都散落在各处。 例如,语法插件在 /u
所以我的 ~/.vimrc 文件中的设置正确设置 set mouse=a set ttymouse=xterm2 但是,当我使用 vim 并尝试使用鼠标滚轮滚动时,命令提示符上的滚动条会移动,而不是
我试图尝试 vim 在启动时加载的自动加载文件。我将 example.vim 文件保存在: ~/.vim/autoload/ 目录并编写了一个非常简单的函数: echom "Autoloading..
这个问题已经有答案了: How can you check which options vim was compiled with? (3 个回答) 已关闭 7 年前。 我在多台计算机上使用相同的 V
我需要将一些设置和变量写入一些文本文件以供以后检索。检索文件可以是一个简单的源命令。那么从 vimscript 写入文件的最简单方法是什么? 我只想存储一些全局变量。全局的,因为它们将被多个缓冲区使用
如何使 vim 列(:set 光标列)具有不同的颜色?这是我现在看到的: 请注意,列颜色与 vim 用于标记我的身份等的颜色相同(我认为是背景颜色)。我想选择不同的颜色。 干杯:) 最佳答案 使用这个
我试图尝试 vim 在启动时加载的自动加载文件。我将 example.vim 文件保存在: ~/.vim/autoload/ 目录并编写了一个非常简单的函数: echom "Autoloading..
我正在修改已安装的 VIM 插件,并在另一个终端选项卡中测试结果。每次我想测试更改时,我都必须重新启动 VIM。 有没有更快的方法来完成这个过程?如何在 VIM 启动后重新加载 VIM 插件? 插件是
一个简单的例子: function! Foo() echom 'Starting Foo' let x = Bar(123) " Function does not exist so
有没有办法让 Vim 像带有 explorer 插件的 notepad++ 或 pspad、ultraedit 和 editplus 等其他文本编辑器一样工作? 也就是 保持文件浏览器始终在左侧(左侧
经过多次谷歌搜索后,我无法使 Vim 的代码隐藏功能与 Javascript 和 Typescript 一起使用(无需插件)。 我一直在尝试在我的 .vimrc 中使用如下行来隐藏我的代码,但没有任何
我有以下问题:在 Pycharm 中试验 vim 宏时(我使用的是 Idea Vim 插件)- 我输入了一个简单的宏并让编辑器运行它 100 次。执行速度非常慢,我无法使用 these 中的任何一个来
如何在 vim 中将字符串(4000 到 4200)替换为(5000 到 5200).. 最佳答案 另一种可能性: :%s/\v/5\1/g 这个也能做 200 次,而且由于使用了 \v switch
示例:我有一些文本,比如这个 php 代码 if(empty($condition)) { // work here... } 我的默认寄存器包含字符串“$NewCondition”。 我想将
有时我想在当前缓冲区上应用一些自定义的额外语法突出显示。 如何使用内置的 vim 语法/高亮系统来完成(我不想使用 Highlight 插件) 例如,我想突出显示当前缓冲区中的所有断言语句。 最佳答案
我有一个ora文件,它的长度为200,000行,但最后60,000行的某些行都是空白回车/空格。 我知道G会跳到文件末尾,但是我是否将vim配置为跳到非空格和非回车符的最后一行或字符? 最佳答案 G?
我想在退出vim后看到屏幕原来的内容就像打开文件之前一样,我的文件不是退出而是原始显示不存在 谢谢 最佳答案 在运行全屏应用程序后返回屏幕内容与将内容保留在那里的功能并不特定于 vi,而是特定于您的终
我是一名优秀的程序员,十分优秀!