term
交互不完全了解,这阻碍了我使其能够在neovim中正确显示的功能。在我的.vimrc文件中,所讨论的配色方案的正确行为需要设置
set term=xterm
set t_Co=256
忽略这些设置之一将导致配色方案的显示不正确:
正确
不正确
不同不正确
方案如下所示:
set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif
let g:colors_name="impact3"
if exists("g:impact_transbg")
hi Normal ctermfg=255 ctermbg=none
hi NonText ctermfg=DarkGray ctermbg=none
hi Statement ctermfg=Blue ctermbg=none
hi Comment ctermfg=DarkGray ctermbg=none cterm=bold term=bold
hi Constant ctermfg=173 ctermbg=none
hi Identifier ctermfg=Cyan ctermbg=none
hi Type ctermfg=DarkGreen ctermbg=none
hi Folded ctermfg=0 ctermbg=235 cterm=underline term=none
hi Special ctermfg=Blue ctermbg=none
hi PreProc ctermfg=LightGray ctermbg=none cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=none
hi Cursor ctermfg=white ctermbg=none
hi ErrorMsg ctermfg=Red ctermbg=none cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=none
hi VertSplit ctermfg=0 ctermbg=0
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=Gray cterm=underline term=none
hi Title ctermfg=255 ctermbg=Blue
hi String ctermfg=Blue ctermbg=none
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=2 ctermbg=None
hi Search ctermfg=Black ctermbg=2
hi TabLine ctermfg=0 ctermbg=DarkGray
hi TabLineFill ctermfg=DarkGray ctermbg=DarkGray
else
hi Normal ctermfg=White ctermbg=Black
hi NonText ctermfg=DarkGray ctermbg=Black
hi Statement ctermfg=Blue ctermbg=Black
hi Comment ctermfg=DarkGray ctermbg=Black cterm=bold term=bold
hi Constant ctermfg=DarkCyan ctermbg=Black
hi Identifier ctermfg=Cyan ctermbg=Black
hi Type ctermfg=DarkGreen ctermbg=Black
hi Folded ctermfg=DarkGreen ctermbg=Black cterm=underline term=none
hi Special ctermfg=Blue ctermbg=Black
hi PreProc ctermfg=LightGray ctermbg=Black cterm=bold term=bold
hi Scrollbar ctermfg=Blue ctermbg=Black
hi Cursor ctermfg=white ctermbg=Black
hi ErrorMsg ctermfg=Red ctermbg=Black cterm=bold term=bold
hi WarningMsg ctermfg=Yellow ctermbg=Black
hi VertSplit ctermfg=White ctermbg=Black
hi Directory ctermfg=Cyan ctermbg=DarkBlue
hi Visual ctermfg=White ctermbg=DarkGray cterm=underline term=none
hi Title ctermfg=White ctermbg=DarkBlue
hi StatusLine term=bold cterm=bold,underline ctermfg=White ctermbg=Black
hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray ctermbg=Black
hi LineNr term=bold cterm=bold ctermfg=White ctermbg=Black
endif
在neovim,无法设置。我尝试使用手动设置的$ TERM调用neovim,如下所示:
TERM=xterm nvim
这样可以在常规vim中正确显示颜色(即等效于.vimrc中的设置项) ,但在neovim中,它看起来像这样:
为什么必须要组合
term
和set term=xterm
才能在vim中正确显示此配色方案,以及为什么等价的设置组合会在neovim中产生不同的结果?编辑:
默认值为
set t_Co=256
,由于某些原因,必须将其替换为常规vim中的$TERM=xterm256-color
,以使彩色显示正确。当环境变量的默认值为256时,neovim如下所示:这与带有
xterm
的常规vim相同,但不是预期的。我的目标是了解为什么xterm hack在vim中是必需的/可以工作,以及为什么它在neovim中看起来不一样。请注意,上述术语env变量可以正确显示许多颜色设置,值得注意的例外是行号和背景。我怀疑可能会涉及在此特定配色方案中指定颜色的方式。
#1 楼
主要问题遇到的主要问题是由
.vimrc
中的命令的顺序引起的。
加载颜色方案后设置
g:impact_transbg
变量,并且,所以当通过colorscheme的
if
语句检查该变量时不存在,并且使用了colorcheme的第二个版本(在
else
块中)。要修复,您只需要将设置变量的行移动到加载颜色方案的行上方
:
let g:impact_transbg=1
colorscheme impact3
您可以(并且应该!)然后从您的
.vimrc
中删除不必要的行:set term=xterm
set background=dark
set t_Co=256
其他问题
我还可以消除您可能对其他一些误解/困惑
这是如何工作的:
解释
'term'
和't_Co'
的行为您的$ TERM设置为
xterm256-color
。 Vim读取此内容,并查询terminfo(或termcap)以找出终端支持的颜色,然后相应地设置
't_Co'
。假设您的$ TERM是正确的(您是),并且您的terminfo数据库包含该终端的正确信息(您的是),则您无需手动重置
't_Co'
。但是,您随后将Vim的
'term'
手动设置为xterm。您的terminfo告诉Vim该终端仅支持8种颜色,因此添加该颜色会导致
't_Co'
被错误地设置为8。您正在手动将't_Co'
设置回'term'设置为正确的值,您将
不需要。
't_Co'后手动更改
g:impact_transbg
时,会导致重新加载颜色方案(以使colorcheme适应
新的颜色数),并且由于现在已设置
g:impact_transbg
,因此您将获得所需的颜色。
(省略行设置
'term'
时,当您将连接到.vimrc中的后一行时,
't_Co'
已经设置为256,因此不会重新加载colorcheme:因此颜色错误。)
因此,要概括一下:
term=xterm
colorscheme impact3
let g:impact_transbg=1
set t_Co=256
结果:当
't_Co'
设置为256时,颜色方案会重新加载,颜色正确。"term=xterm
colorscheme impact3
let g:impact_transbg=1
set t_Co=256
结果:通过
colorscheme
命令加载了Colorscheme,变量不存在,颜色错误。
term=xterm
colorscheme impact3
let g:impact_transbg=1
"set t_Co=256
结果:通过
colorscheme
命令加载Colorscheme,变量不存在,Vim仅使用8种颜色,颜色是错误的。
"term=xterm
colorscheme impact3
let g:impact_transbg=1
"set t_Co=256
结果:Colorscheme的加载者
colorscheme
命令,变量不存在,颜色错误。
let g:impact_transbg=1
colorscheme impact3
结果:
colorscheme
命令加载了Colorscheme,变量确实存在,因此颜色正确。 (另外,'term'
和't_Co'
也是正确的!)NeoVim中的行为有所不同,只是因为忽略了设置
't_Co'
的调用,就像其他回答者已经提到的那样。'background'
设置颜色方案后,还设置
'background'
。对于此特定的颜色方案,这完全没有必要,因为
颜色方案要做的第一件事就是将
'background'
设置为'dark'
。请注意,我不同意另一个建议者加载颜色方案后应设置
'background'
。颜色方案可能使用'background'
的值来调整其颜色,因此在加载
之前设置
'background'
更为明显。 (尽管请注意,如果更改'background'
设置,Vim会重新加载所有已加载的配色方案,因此此后也可以设置将其设置为
'background'
:这不是最佳选择。)评论
谢谢,这是非常彻底的,我感谢其他背景。
–康拉德·迈耶(Conrad Meyer)
19/12/7在6:48
@ConradMeyer我很高兴对您有所帮助!
–丰富
19/12/8在21:35
#2 楼
对于Neovim,t_Co
和TERM
没什么区别。您在调用
set background=dark
之前和之后都调用colorscheme impact3
。将set background=dark
移到颜色方案的底部,然后从vimrc中删除另一个调用。从
:help 'background'
中:When 'background' is set Vim will adjust the default color
groups for the new value.
...
When a color scheme is loaded (the "g:colors_name" variable
is set) setting 'background' will cause the color scheme to
be reloaded.
另请参见:https ://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
我的目标是理解为什么xterm hack是必要的/在vim中有效,为什么它看起来不像
Neovim不在乎
t_Co
,因为除非您启用“真彩色”,否则它假定为256。实际上Neovim忽略了所有
t_*
选项,请参阅:help t_xx
。Neovim不允许设置
&term
,因为它毫无意义。 Neovim使用unibilium和其他机制来检测终端功能。评论
非常感谢您对Neovim术语能力检测和`t_ *`设置的见解。删除的冗余副本并重新设置set background = dark语句不会产生任何效果,但是有关基础实现的那些细节对我来说更有价值。
–画廊
2015年6月15日在3:09
#3 楼
我看到您使用iTerm2,因此您可以尝试以下操作:打开“偏好设置”窗口⌘+,
转到
profiles
选项卡检查您的当前个人资料在左侧列表中
单击右侧的
terminal
选项卡在
Report terminal type
中选择xterm-256color
完成。
评论
感谢您的建议。我用关于xterm-256color的评论编辑了上面的内容。我按照您的程序进行操作,以查找已经设置的终端类型。
–画廊
15年6月13日在23:08
#4 楼
您缺少一个很棒的NeoVim功能。有一个env var可以帮助解决这些问题。尝试将其放在您的nvimrc中:let $NVIM_TUI_ENABLE_TRUE_COLOR=1 " True gui colors in terminal
或
export NVIM_TUI_ENABLE_TRUE_COLOR=1
在外壳中。
评论
仅供参考:这将需要使用guifg和guibg。 OP的colorscheme使用ctermfg和ctermbg。
–贾斯汀·凯斯(Justin M. Keyes)
15年6月14日在17:42
哦,对了。抱歉!
–扬·范哈勒维恩(Yann Vanhalewyn)
2015年6月19日下午4:35
#5 楼
您需要在您的.config/nvim/init.vim
中设置选项let $NVIM_TUI_ENABLE_TRUE_COLOR=1
set termguicolors
。
评论
这些选项用于将guifg和guibg RGB值用于颜色。问题的配色方案仅使用ctermfg和ctermbg。
–汤米A
16年7月4日在14:30
这为我做到了。 TERM已经是xterm-256color。谢谢!
– Qix-蒙尼卡(MS)被盗
16 Dec 3'在11:41
#6 楼
请注意,特定的配色方案实际上是if-else子句中的两组配色方案。变量g:impact_transbg
的存在可以选择所需的颜色集,并且最初旨在考虑从其得出颜色的配色方案中的透明背景。注释第二种配色方案和if- else语句(仅保留所需的配色方案并取消使用
g:impact_transbg
)即使在删除set term=xterm
和set t_Co=256
的情况下,也会在vim和neovim中产生预期的行为。这意味着在vim和neovim中都使用
$TERM=xterm-256colors
时,有条件的if exists("g:impact_transbg")
失败,但是设置set term=xterm
set t_co=256
的组合允许条件成功。如上所述,删除if-else子句可以解决实质性问题,但是,关于.vimrc术语对与
g:impact_transbg
之间的相互作用,仍然存在一个谜。#7 楼
尝试像这样设置您的$TERM
环境变量:TERM=xterm-256color
也尝试像这样启动nvim:
export TERM=xterm-256color; nvim
如果可行,请在您的外壳中永久设置
$TERM
变量。评论
感谢您的想法,杰夫。我用关于xterm-256color的评论编辑了我的问题。通过导出设置$ TERM无效。
–画廊
15年6月13日在23:09
#8 楼
我最近遇到了日晒主题这个问题。问题确实来自TERM
env变量。 我通过告诉终端仿真器(在我的情况下为终结器)运行
env TERM=xterm-256color zsh
来解决此问题,而不是像通常那样启动zsh。评论
OPs TERM已设置为xterm-256color。我认为您遇到了另一个问题。
–丰富
16-10-25在14:58
评论
您的$ TERM已设置为现代系统上通常认为的“正确”值-启用256色。因此,通常不需要与旧终端兼容的t_Co选项。如果您注释掉两个配置行怎么办?@David注释掉两个配置行看起来与注释掉set term = xterm相同。
您能否提供在正确呈现主题时使用的iTerm颜色配置的屏幕截图以及运行此脚本的输出?