2011-11-29 77 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