Vim CursorLine 在插入模式下的颜色变化

Posted

技术标签:

【中文标题】Vim CursorLine 在插入模式下的颜色变化【英文标题】:Vim CursorLine color change in insert mode 【发布时间】:2011-11-28 16:43:12 【问题描述】:

有很好的sn-p来改变光标颜色:

if &term =~ "xterm\\|rxvt"
  " use an orange cursor in insert mode
  let &t_SI = "\<Esc>]12;orange\x7"
  " use a red cursor otherwise
  let &t_EI = "\<Esc>]12;red\x7"
  silent !echo -ne "\033]12;red\007"
  " reset cursor when vim exits
  autocmd VimLeave * silent !echo -ne "\033]112\007"
  " use \003]12;gray\007 for gnome-terminal
endif

我应该如何改变这一点,而不是光标,CursorLine 会改变颜色,例如从深蓝色变为蓝色?

我的完整配置是https://bitbucket.org/JackLeo/home-configs/src/5b8faf340f87/.vimrc

【问题讨论】:

我喜欢带有注释“使用该死的 hjkl 键”的箭头键的映射。 我在这里是乱写 \ 还是 ^V'ESC' 的可视化?当我将上面的文本复制粘贴到我的 .vimrc 中时,它什么也不做(是的,它声称是一个 xterm ......它是 Linux 机器上的一个腻子会话) 【参考方案1】:

您是否查看过“highlight”命令,这是一种更简单的控制方式。

例如,要更改 CursorLine,

:hi CursorLine guifg=red guibg=blue

参考::help highlight

让它在模式之间切换。

" Enable CursorLine
set cursorline

" Default Colors for CursorLine
highlight  CursorLine ctermbg=Yellow ctermfg=None

" Change Color when entering Insert Mode
autocmd InsertEnter * highlight  CursorLine ctermbg=Green ctermfg=Red

" Revert Color to default when leaving Insert Mode
autocmd InsertLeave * highlight  CursorLine ctermbg=Yellow ctermfg=None

我可以将 termcap 颜色与 autocmd 混合,但 IMO,highlight 更容易长期维护(如果偶尔使用 gVim)

【讨论】:

我知道,我在配置文件中使用它。关键是我希望它会根据我是否处于插入模式而改变。 更新了回复以解决“切换颜色取决于模式”问题。 这是一个非常方便的提示!谢谢!! 澄清一下,对于带有set termguicolors 的gVim 和Neovim,您需要使用guifgguibg。对于终端中的 Vim 和没有真实颜色的 Neovim,您应该使用 ctermbgctermfg 我不喜欢背景颜色,所以我将其更改为“autocmd InsertEnter * set cursorline”/“autocmd InsertLeave * set nocursorline”。现在我将下划线仅作为插入或正常模式的指示符。【参考方案2】:

这很简单,将以下内容放入您的.vimrc 或自定义colorscheme 文件中。

set cursorline
autocmd InsertEnter * highlight CursorLine guifg=white guibg=blue ctermfg=white ctermbg=blue
autocmd InsertLeave * highlight CursorLine guifg=white guibg=darkblue ctermfg=white ctermbg=darkblue

更多信息见:

:help 'cursorline' :help :autocmd :help InsertEnter :help :highlight

注意:您可以使用相同的方法更改光标的颜色,而无需所有这些 if-statements 和 escape-sequences(这也适用于 GVim)。

【讨论】:

其他有用的例子cterm=bold,你可以用NONE“取消设置”任何东西,例如不处于插入模式时我没有突出显示,ctermfg=NONE ctermbg=NONE cterm=NONE【参考方案3】:

当使用带有'Lokaltog/vim-powerline' 的 MacVim 时,您可以设置您的正常/视觉/插入颜色以匹配电力线模式颜色。我发现这对于在不阅读电力线的情况下了解我处于哪种模式非常有帮助,尤其是在大屏幕上。

这是我正在使用的代码,基于@Zarick-Lau 的回答。

在我的colors/molokai.vim 文件中:

" Visual Mode Orange Background, Black Text
hi Visual          guifg=#000000 guibg=#FD971F

" Default Colors for CursorLine
highlight CursorLine guibg=#3E3D32
highlight Cursor guibg=#A6E22E;

" Change Color when entering Insert Mode
autocmd InsertEnter * highlight  CursorLine guibg=#323D3E
autocmd InsertEnter * highlight  Cursor guibg=#00AAFF;

" Revert Color to default when leaving Insert Mode
autocmd InsertLeave * highlight  CursorLine guibg=#3E3D32
autocmd InsertLeave * highlight  Cursor guibg=#A6E22E;

这是一个使用 molokai 原始配色方案的示例。

正常

视觉

插入

我还发现将操作系统设置为使用相同颜色进行视觉选择也很有帮助。例如,我在 OSX 中将突出显示颜色更改为 Orange,当我选择文本时,它现在是橙色而不是蓝色,与 VIM 中相同。

示例

在我编写此 Stack Overflow 条目时,文本框中使用了橙色突出显示。现在我在操作系统中选择的所有文本都与 VIM 设置匹配。

【讨论】:

知道光标线的“日光化”颜色是什么。【参考方案4】:

我选择在插入模式下切换CursorLineNormal。首先使用:hi Normal:hi CursorLine 获取值。然后调整以下几行:

set cursorline
autocmd InsertEnter * highlight Normal ctermbg=7
autocmd InsertEnter * highlight CursorLine ctermbg=15
autocmd InsertLeave * highlight Normal ctermbg=15
autocmd InsertLeave * highlight CursorLine ctermbg=7

对于日光照射,这看起来像这样。我喜欢“焦点”效果。

【讨论】:

【参考方案5】:

即使您进入或离开 INSERT MODE,当前行中也没有颜色


"set cursorline
set noshowmode

"Enable CursorLine
set nocursorline

"Default Colors for CursorLine
hi CursorLine cterm=NONE ctermbg=NONE ctermfg=NONE

"Change Color when entering Insert Mode
autocmd InsertEnter * set nocursorline

"Revert Color to default when leaving Insert Mode
autocmd InsertLeave * set nocursorline

【讨论】:

以上是关于Vim CursorLine 在插入模式下的颜色变化的主要内容,如果未能解决你的问题,请参考以下文章

vim介绍 vim一般模式下的各个功能

光标线的颜色在哪里定义?

VIM工具

学习十七

5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vi

Vim操作指南