原标题是 «特定于语言的颜色方案防止简单的颜色方案为某些特定于语言的标签着色»
我正在使用 gVim 7.3 (在Ubuntu 12.04 Arch x86/64 上,就此而言)。
更新(2013-03-02):
我想我终于可以准确地表达我的意思了(我仍然找不到正确的命令,假设它甚至存在!)。基本上这是流程:
- 使用定义了几个基本组(如语句、注释、函数)的小尺寸颜色方案开始会话;
- 切换到“更大”的配色方案(如 Solarized 或 Jellybeans),它定义了更具体的组(如 vimCommand、hsImport 或 rubyBeginEnd)。这些更具体的组覆盖了基本组;
- 切换回“较小”的配色方案(未定义特定组的配色方案)。
结果是会议上充斥着“无家可归”的群体,这些群体掩盖了基本的群体,并阻止了一些词被突出显示。这些无家可归的群体如下所示:
输入 :hi vimCommand
Enter
输出 vimCommand xxx cleared
顺便说一句,在 Solarized 的 github 问题跟踪器中体验和发布了类似的东西 → Vim 色彩方案在切换时留下了破坏的痕迹
更新(2012-11-25):
一个好的解决方案可能是清除当前会话的“突出显示”变量(我不是在谈论像smartindent
, encoding
,之类的number
变量,而是谈论像Statement
, Comment
rubyClass
,xmlTag
之类的变量,即由 , 等命令定义的hi link ...
变量highlight ...
)。
如果有人能解释它是如何存储在内存中的,它可能会帮助我弄清楚如何清理它(我尝试过保存会话:mksession mysession.vim
然后查看它,但没有任何语法高亮变量的痕迹)。
此外,这只是一个模糊的假设,似乎:hi clear
不清理突出显示组的原因是“剩余”是通过间接定义(例如hi link
)定义的。
原来的:
当我的默认颜色方案(blueshift 的修改版本)被加载时,每个应该突出显示的标签都被正确着色。
在会话期间,我切换到jellybeans颜色方案 ( :colo jellybeans
),它比我的默认颜色方案有更多选项:
如果我再次切换到默认颜色方案 ( :colo blueshifted
),则会禁用某些突出显示:
似乎在会话开始时,如果我使用未指定某些特定语言标签行为的配色方案,则这些标签将使用某些现有颜色自动着色。
我知道jellybeans的特定语言标签保留在“缓存”中,并且负责禁用自动着色功能,因为如果我在没有特定语言标签的颜色方案之间切换(从未使用过jellybeans),自动着色没有被破坏。
其他颜色方案也是如此(例如 railscasts.vim 使用 HTML 特定的颜色)。我知道我可以通过在不太具体的配色方案中添加缺少的标签来解决这个问题,但我正在寻找一个更通用的解决方案。
问题
当在更详细的配色方案之后加载不太详细的配色方案时,我该怎么做才能避免这些自动设置颜色(在加载第一个配色方案时使用)被禁用?
我可以在更改配色方案时清理会话缓存(即从“会话缓存”中删除 jellybeans.vim 使用的特定标签)吗?
我的尝试 这些是我在各种组合中使用的命令,但无济于事:
:syntax off
:syntax clear
:hi clear
:syntax reset
唯一有效的(显然!)是手动重新定义hi link
“简单”颜色方案中缺少的命令。但是,当然这与使用其他颜色方案(如 Solarized)改变颜色并没有什么不同。当然,这不是“如何删除突出显示组剩余部分?”问题的解决方案。