VIM скрыть с более чем одним персонажем - PullRequest
12 голосов
/ 29 ноября 2011

На самом деле я хотел бы отобразить -> с (после стрелки есть пробел) в файлах haskell.Но у меня сложилось впечатление, что механизм маскировки работает только для замены -> на один символ.Нежелательный эффект - визуально плохой отступрасширение) плагин)

syntax match hsNiceOperator "<-" conceal cchar=←

1 Ответ

16 голосов
/ 08 января 2012

Я делаю именно то, что вы хотите в 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
...