vim 隐藏多个字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim 隐藏多个字符相关的知识,希望对你有一定的参考价值。
其实我想展示的是 ->
与 →
(箭头后面有一个空格)的haskell文件。但在我的印象中,conceal机制只适用于取代 ->
由一个字符。一个不理想的效果是视觉上不好缩进。
有什么方法可以实现吗?
谢谢。
编辑:其实我用的是这个,(来自 haskell.vim
(隐蔽性增强)插件)
syntax match hsNiceOperator "<-" conceal cchar=←
我在C语言中完全按照你的要求来做,诀窍是分别隐藏每个字符,就像这样。
syn match ArrowHead contained ">" conceal cchar=▶
syn match ArrowTail contained "-" conceal cchar=─
syn match ArrowFull "->" contains=ArrowHead,ArrowTail
你可能会发现ArrowHead或ArrowTail会在ArrowFull之外被匹配,很不幸。这是因为现有的语法规则使用 contains=ALLBUT,...
或类似的东西。
为了在C语言中解决这个问题,我在cParenGroup集群中添加了ArrowTail和ArrowHead,这似乎可以防止任何问题。
syn cluster cParenGroup add=ArrowTail,ArrowHead
你可能需要为Haskell做类似的事情。
因为我根本不使用conceal功能,所以我告诉Vim去 "隐藏 "所有的箭头。
set conceallevel=1 concealcursor=nvic
另外,如果你不喜欢conceal chars的默认颜色,你可以像这样改变它们。
hi conceal ctermfg=DarkBlue ctermbg=none guifg=DarkBlue guibg=none
超级老的问题,但如果有人想弄清楚这个问题,我已经成功地完成了以下工作。
call matchadd('Conceal', '<-\&<', 10, -1, {'conceal':'←'})
call matchadd('Conceal', '<\zs-', 10, -1, {'conceal':' '})
hi Conceal ctermbg=NONE ctermfg=red guifg=red
第二个参数 matchadd
是 <pattern>
. 审视 :help pattern
告诉我们,一个 pattern
是一个或多个 branches
相隔 \|
和a branch
是一个或多个 concats
相隔 \&
. 从文档中可以看到: "[a branch
] 匹配上一个 concat
但前提是前面所有的 concats
也在同一位置匹配"。
所以在第一次调用中,我们指定了一个 pattern
有一个分支(没有 \|
值),由两个 concats
. 第一个 concat
匹配完整的箭头,第二个匹配箭头的第一个字符。因此,最后一个 concat
是 <
这就是conceal参数的所有匹配项,但这只有当 <
见于 <-
. 第二个电话给出了 pattern
有一个 branch
和一个 concat
. 该模式始于 <
但比赛会以 zero-width
原子 \zs
将匹配的字符重置在下一个字符,即 -
,它被一个空间所掩盖。该 hi Conceal
只是高亮。
在我的测试中 <
孤掌难鸣 ←
和 -
本身并没有变成一个空间。
希望这能帮助到大家:)
以上是关于vim 隐藏多个字符的主要内容,如果未能解决你的问题,请参考以下文章