2011-11-29 45 views
12

其实我想在haskell文件中显示->(箭头后面有空格)。但我有一个隐藏机制的印象只能用一个字符代替->。不良影响是视觉上不好的缩进。vim隐藏多个字符

有没有办法做到这一点?

谢谢。

编辑:其实我用这个,(从haskell.vim(隐瞒增强)插件)

syntax match hsNiceOperator "<-" conceal cchar=← 
+0

你用什么方法来替换另一个字符? –

+0

我编辑了我的答案,实际上我使用了用于语法突出显示的隐藏mecanism – yogsototh

+0

你可以发布“→→”的编写 - 它似乎对于这个问题至关重要? – sehe

回答

16

我做的正是你在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中修复此问题,我将ArrowTail和ArrowHead添加到了cParenGroup群集,这似乎可以防止出现任何问题。

syn cluster cParenGroup add=ArrowTail,ArrowHead 

您可能需要为Haskell做类似的事情。

因为我没有使用隐藏功能在所有否则,我告诉Vim继续前进,“隐藏”的箭头所有的时间:

set conceallevel=1 concealcursor=nvic 

BTW,如果你不喜欢默认的颜色对于隐藏字符,你可以像这样改变它们:

hi conceal ctermfg=DarkBlue ctermbg=none guifg=DarkBlue guibg=none 
+0

“,因为现有的语法规则使用'contains = ALLBUT,...'或类似的东西。” :然后在'syn match ArrowHead [...]'和'syn match ArrowTail [...]''结尾处使用'containedin = ArrowFull'。 – user2987828

+0

@ user2987828这在Vim 7.4中不适用于我。我在#defines中获得了错误的ArrowHeads和ArrowTails。 – superjer