Ответ 1
Я делаю именно то, что вы хотите в 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
Кстати, если вам не нравятся цвета по умолчанию для скрытых символов, вы можете их изменить следующим образом:
hi conceal ctermfg=DarkBlue ctermbg=none guifg=DarkBlue guibg=none