Правило подсветки синтаксиса для выделения ссылки на функцию при вызове функции Lisp - PullRequest
1 голос
/ 21 мая 2019

Я пишу правила подсветки синтаксиса в Vim для Clojure или в другом Лиспе, где (fn ...) встречается в основном для вызовов функций. Я застрял при выделении первого слова вызова функции, то есть ссылки на функцию. Ниже приведена демонстрация того, где я нахожусь:

Wrong lisp syntax highlighting

Как видите, первое слово в вызовах функций (str в (str a b c d)) выделено. Однако первый элемент в списках литералов (1 в '(1 2 3)) также выделен, что является непреднамеренным. Подчеркнем, что в обоих списках литералов выделены первые элементы, что неправильно.

Ниже приведено правило синтаксиса, которое делает это выделение:

syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"

Вот как я понимаю это правило:

  • '\{0}: символ ' должен совпадать 0 раз;
  • \((\)\@<=: символ ( должен совпадать, но не быть захваченным;
  • \<.\{-1,}\>: соответствует одному слову (\< и \> представляют начало и конец слова);
  • ?\{0,1}: если в конце слова есть символ ?, считайте его частью слова: например, выделенный ? в list? на картинке.

Я довольно много экспериментировал, но я не могу заставить первые два подправила работать вместе.

1 Ответ

2 голосов
/ 22 мая 2019

Вы можете использовать

syn match lispFunc "\(\('\)\@<!(\)\@<=\<.\{-1,}\>?\{0,1}"

Здесь \(\('\)\@<!(\)\@<= является положительным взглядом, который соответствует (, только если ему не предшествует '. Это условие устанавливается с помощью \('\)\@<! отрицательного взгляда сзади внутри положительного взгляда сзади.

...