7

原标题是 «特定于语言的颜色方案防止简单的颜色方案为某些特定于语言的标签着色»

我正在使用 gVim 7.3 (在Ubuntu 12.04 Arch x86/64 上,就此而言)

更新(2013-03-02):

我想我终于可以准确地表达我的意思了(我仍然找不到正确的命令,假设它甚至存在!)。基本上这是流程:

  1. 使用定义了几个基本组(如语句、注释、函数)的小尺寸颜色方案开始会话;
  2. 切换到“更大”的配色方案(如 Solarized 或 Jellybeans),它定义了更具体的组(如 vimCommand、hsImport 或 ruby​​BeginEnd)。这些更具体的组覆盖了基本组;
  3. 切换回“较小”的配色方案(未定义特定组的配色方案)。

结果是会议上充斥着“无家可归”的群体,这些群体掩盖了基本的群体,并阻止了一些词被突出显示。这些无家可归的群体如下所示:

输入 :hi vimCommandEnter
输出 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),它比我的默认颜色方案有更多选项:
果冻豆.vim

如果我再次切换到默认颜色方案 ( :colo blueshifted),则会禁用某些突出显示:
在此处输入图像描述

似乎在会话开始时,如果我使用未指定某些特定语言标签行为的配色方案,则这些标签将使用某些现有颜色自动着色。

我知道jellybeans的特定语言标签保留在“缓存”中,并且负责禁用自动着色功能,因为如果我在没有特定语言标签的颜色方案之间切换(从未使用过jellybeans),自动着色没有被破坏。

其他颜色方案也是如此(例如 railscasts.vim 使用 HTML 特定的颜色)。我知道我可以通过在不太具体的配色方案中添加缺少的标签来解决这个问题,但我正在寻找一个更通用的解决方案。

问题

  • 当在更详细的配色方案之后加载不太详细的配色方案时,我该怎么做才能避免这些自动设置颜色(在加载第一个配色方案时使用)被禁用?

  • 我可以在更改配色方案时清理会话缓存(即从“会话缓存”中删除 jellybeans.vim 使用的特定标签)吗?

我的尝试 这些是我在各种组合中使用的命令,但无济于事:

:syntax off
:syntax clear
:hi clear
:syntax reset

唯一有效的(显然!)是手动重新定义hi link“简单”颜色方案中缺少的命令。但是,当然这与使用其他颜色方案(如 Solarized)改变颜色并没有什么不同。当然,这不是“如何删除突出显示组剩余部分?”问题的解决方案。

4

1 回答 1

5

我可能有点晚了:-)但我相信我解决了这个问题。以下是我在 GitHub上的 Solarized 问题跟踪器上发表的帖子的引述。


大家好,

很抱歉在上次发表评论一年后在这里闯入并建议关闭我未参与的项目的问题(尽管我是一个快乐的用户:-) 但是我相信:1.这是由一个错误引起的Vim 和 2。我找到了一个相当优雅的解决方法。所以我想这个问题可以关闭吗?

几年前,我为 Vim 编写了一个配色方案切换器插件,但从未发布过。创建插件后不久,我注意到这个问题中描述的行为并对此感到恼火,确信这是 Vim 中的一个错误。我什至尝试修复 Vim C 代码中的问题,但这对我来说有点太多了:-]。那时我从未听说过 Solarized。我遇到了其他几个配色方案(包括我自己的)的问题。

今天我决定发布配色方案切换器插件(请参阅xolox/vim-colorscheme-switcher),在发布插件之前,我决定再次尝试解决此处描述的问题。我尝试了各种令人讨厌的黑客攻击,但最终得到了一个相当优雅的解决方法,看起来并不太脆弱。自述文件/主页包含对其工作原理的解释(为方便起见,我在下面引用它)。


Vim 配色方案的编写方式与在大量配色方案之间快速切换的想法并不兼容。在我看来,这是 Vim 内部工作方式的一个丑陋的实现细节,换句话说,我认为这是一个应该修复的错误……以下是一些详细解释问题的参考资料:

由于这种行为会阻碍循环使用配色方案,因此配色方案切换器插件包含一个可以隐藏问题的解决方法:

  1. 启动时会创建一个字典,用于记住突出显示组之间的链接。
  2. 在加载配色方案之前和之后,配色方案切换器插件会运行不带任何参数的:highlight命令来查找突出显示组之间的链接。找到的每个链接都会添加到字典中。现有条目已更新。这是通过调用来完成的xolox#colorscheme_switcher#find_links()
  3. 加载配色方案后,配色方案切换器插件运行不带任何参数的:highlight命令以查找处于“已清除”状态的突出显示组。对于这些组中的每一个,如果它们先前已链接,则链接将恢复。这是通过调用来完成的xolox#colorscheme_switcher#restore_links()

可能这个解决方案仍然不完美,但它比开箱即用的行为要好得多:在我实施上述步骤之前,当我循环浏览我的配色方案时,Vim 最终会以白色背景上的黑色文本结束,并且没有其他的!通过上述步骤,我可以根据需要循环多次,并且到目前为止我检查过的所有配色方案看起来都很好。


我希望得到有关配色方案切换器(所使用的技术)的反馈;我希望它对你和我一样有效。我在 Linux (GTK) 上的 Vim 7.3 和 MacVim 7.3 中对其进行了测试。

于 2013-05-18T23:29:58.893 回答