【问题标题】:How to have in Vim one syntax highlighting and two colors with two different start/end sets?如何在 Vim 中使用一种语法高亮和两种颜色以及两种不同的开始/结束集?
【发布时间】:2011-08-11 17:19:26
【问题描述】:

假设我有一个文件:memovi.txt(学习vi...),其中每一行具有相同的结构(命令冒号解释);例如:

dw : 从当前光标位置删除到下一个单词

(注意:文字白色,背景黑色)

现在,我想做两件事:

1) 以绿色突出显示命令 我通过定义一个带有 start 和 end 的区域来做到这一点,我使用 start=≈ 和 end=≈

所以,在我的 .vimrc 中我有:

:command Tran :source syntax.vim

在我的 syntax.vim 中,我有:

syn region cTran conceal start='≈' end='≈'
hi cTran ctermbg=Black ctermfg=DarkGreen

2) 但我当然希望插入一个示例(例如 d4w),并以不同的颜色(洋红色)突出显示它,并且我想通过将它放在 start=• 和 end= 之间来突出显示它• 带来如下结果:

≈dw≈(因此为绿色):从当前光标位置删除到 下一句话。 •d4w•(因此为洋红色):删除 4 个单词

但我似乎无法根据两个不同的开始/结束集定义一种具有两种不同“着色”的语法突出显示。或者我可以吗?

提前致谢

【问题讨论】:

    标签: vim syntax-highlighting


    【解决方案1】:

    vim 帮助文件语法 (help.vim) 是这种行为的一个很好的模板。它使用栏“|”分隔帮助超链接。然后将酒吧隐藏起​​来。

    这里是 syntax.vim,它应该实现你想要的 ASCII 分隔符 |=。我没有用你的 Unicode 字符测试它,但我看不出为什么会有任何改变(尽管我在 Unicode 的变幻莫测中没有受过教育)。

    syn match cTransA "|.*|" contains=delimA
    syn match cTransB "=.*=" contains=delimB
    syn match delimA contained '|' conceal
    syn match delimB contained '=' conceal
    hi cTransA ctermfg=DarkGreen
    hi cTransB ctermfg=Magenta
    

    希望这会有所帮助。

    【讨论】:

    • 一定要使用非贪婪匹配
    • @sidyll :感谢您的精确,但是,如果您觉得这很愚蠢,对不起:您所说的非贪婪匹配是什么意思?
    • @sidyll : 不要费心回答我,我搜索,找到并且(我认为)理解......再次感谢
    • 抱歉@ThG,没有及时看到你的评论,但很高兴你找到了它——有时这是最好的学习方式
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2016-01-29
    • 2019-08-23
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多