выделение синтаксиса vim - PullRequest
3 голосов
/ 26 марта 2011

Я хочу создать собственную подсветку синтаксиса в vim для списка задач.

Элементы задач начинаются с дефиса.Существуют два типа элементов задачи: (a) элементы без тега «@done».(б) предметы с тегом @done.(a) и (b) должны быть выделены по-разному.

Я использую taskpaper , который работает нормально, но проблема в том, я пытаюсь заставить это работать дляэлементы задачи, которые занимают несколько строк.Например:

- Regular item (works)
- Completed item @done (works)
- Multi-line item. This item continues on to 
  the line below. (doesn't work)
- Multi-line completed item. This item continues
  on to the line below. (doesn't work). @done

Файл выделения по адресу taskpaper работает для первых двух, но не для вторых двух.Как обходной путь, я попробовал это для последнего случая выше:

syn region multLineDoneItem start="{" end="}" fold
HiLink multLineDoneItem NonText

Но теперь я вынужден пометить многострочные готовые элементы скобками, например:

- {Multi-line completed item. This item continues
  on to the line below. (workaround works).}

Я уже искал stackexchange и в других местах.Буду признателен за любую помощь!:)

1 Ответ

5 голосов
/ 27 марта 2011

Вы можете попробовать использовать \ze атом регулярного выражения в конечной части вашей области синтаксиса.Это позволит вам сопоставить все до, но не включая следующую задачу.Я не смотрел, как вы делаете сопоставление, но что-то вроде этого может сработать.

syn region muiltLineItem     start="^-" end="\(\s*\n)\+\ze^-" fold    
syn region multiLineDoneItem start="^-" end="@done\s*\n\(\s*\n\)*\ze^-" fold
HiLink multiLineItem Normal
HiLink multiLineDoneItem NonText

Я вообще не проверял это, но думаю, что-то вроде этого должно работать.Если вы хотите учесть отступы, атом регулярного выражения \z позволит вам сохранить совпадающие строки с одинаковым отступом.

ОБНОВЛЕНИЕ:

Попробуйте это:1012 *

syn match multilineItem "^-\_.\{-}\ze\(\n-\|\%$\)" fold
syn match multilineDoneItem "^-\(\%(\_^-\)\@!\_.\)\{-}@done\s*\n\ze" fold
command -nargs=+ HiLink highlight default link <args>
HiLink multilineItem Normal
HiLink multilineDoneItem NonText
delcommand HiLink

О, это также должно работать для всех четырех случаев, а не только для многострочных.

...