gVim:删除突出显示组的语法

时间:2012-10-16 13:29:13

标签: syntax-highlighting vim color-scheme vim-syntax-highlighting

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

我正在使用gVim 7.3 (在 Ubuntu 12.04 Arch x86 / 64上,这很重要)

更新(2013-03-02):

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

  1. 使用小尺寸 colorscheme开始会话,该方案定义了几个基本组(如Statement,Comment,Function);
  2. 切换到“更大”的colorscheme(如Solarized或Jellybeans),它定义了更多特定的组(如vimCommand,hsImport或rubyBeginEnd)。这些更具体的群体会覆盖基本群体;
  3. 切换回“较小”的colorscheme(未定义特定组的颜色)。
  4. 结果是会话混乱了“无家可归者”群体,这些群体模糊了基本群体并阻止某些词语被突出显示。这些无家可归者群体如下所示:

    INPUT :hi vimCommand 输入
    输出 vimCommand xxx cleared

    通过Solarized的github问题跟踪器→Vim colorscheme leaves a wake of destruction when switching away

    来体验和发布类似的东西

    更新(2012-11-25):

    可能一个好的解决方案是清除当前会话的“突出显示”变量(我不是在谈论像smartindentencodingnumber这样的变量,而是关于像StatementComment rubyClassxmlTag,即由hi link ...highlight ...等命令定义的内容。) 如果有人能够解释它是如何存储在内存中的,那么它可能有助于我弄清楚如何清除它(我已经尝试通过:mksession mysession.vim保存会话然后查看它,但是没有任何语法的痕迹突出变量)。

    此外,这只是一个模糊的假设,似乎:hi clear没有清理突出显示组的原因是“剩余”是通过间接定义的定义(例如hi link)。


    原件:

    当加载我的默认colorscheme(modified version of blueshift)时,每个应突出显示的标签都会正确着色。
    enter image description here

    在会话期间,我切换到jellybeans colorscheme(:colo jellybeans),它有比我的默认颜色方案更多的选项:
    jellybeans.vim

    如果我再次切换到我的默认colorscheme(:colo blueshifted),则禁用某些突出显示:
    enter image description here

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

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

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

    问题

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

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

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

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

    唯一可行的(显然!)是手工重新定义“简单”colorscheme中缺少的hi link命令。但是当然使用其他颜色方案(如Solarized)和改变颜色也没有什么不同。当然,这不是解决问题“你如何删除突出显示群体剩余物?”的问题。

1 个答案:

答案 0 :(得分:3)

我可能有点晚了:-)但我相信我解决了这个问题。以下是GitHub上the post I made on the Solarized issue tracker的引用。


大家好,

很抱歉在最后评论一年之后插入这里并建议关闭一个我没有参与的项目的问题(虽然我是一个快乐的用户:-)但是我相信:1。这是由Vim和2中的一个错误。我发现了一个相当优雅的解决方法。所以我想这个问题可以关闭吗?

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

今天我决定发布配色方案切换器插件(见xolox/vim-colorscheme-switcher),在我发布插件之前,我决定再次尝试修复此处描述的问题。我尝试了各种令人讨厌的黑客,但最终得到了一个相当优雅的解决方案,似乎并不太脆弱。自述文件/主页包含explanation of how it works(为方便起见,我在下面引用它)。


编写Vim配色方案的方式与在许多配色方案之间快速切换的想法并不完全兼容。在我看来,这是一个丑陋的实现细节,关于Vim如何在内部工作,换句话说,我认为这是一个应该修复的错误......这里有一些参考资料可以解释这个问题:

由于此行为阻碍了颜色方案的循环,因此颜色方案切换器插件包含一个应该隐藏问题的解决方法:

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

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


    我希望得到有关(配色方案切换器使用的技术)的反馈;我希望它对你有用,对我来说也是如此。我在Linux(GTK)和MacVim 7.3上的Vim 7.3中进行了测试。

相关问题