Я пишу правила подсветки синтаксиса в Vim для Clojure или в другом Лиспе, где (fn ...)
встречается в основном для вызовов функций. Я застрял при выделении первого слова вызова функции, то есть ссылки на функцию. Ниже приведена демонстрация того, где я нахожусь:
Как видите, первое слово в вызовах функций (str
в (str a b c d)
) выделено. Однако первый элемент в списках литералов (1
в '(1 2 3)
) также выделен, что является непреднамеренным. Подчеркнем, что в обоих списках литералов выделены первые элементы, что неправильно.
Ниже приведено правило синтаксиса, которое делает это выделение:
syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"
Вот как я понимаю это правило:
'\{0}
: символ '
должен совпадать 0 раз;
\((\)\@<=
: символ (
должен совпадать, но не быть захваченным;
\<.\{-1,}\>
: соответствует одному слову (\<
и \>
представляют начало и конец слова);
?\{0,1}
: если в конце слова есть символ ?
, считайте его частью слова: например, выделенный ?
в list?
на картинке.
Я довольно много экспериментировал, но я не могу заставить первые два подправила работать вместе.