Подсветка синтаксиса Vi для слов с последующими скобками

Я хочу изменить цвет ключевого слова, за которым следует левая скобка в файле.R.

Например, когда я печатаю length()Я хочу слово length быть выделены (а не скобки), но когда я печатаю только length он не получит никакого выделения.

Я также хотел бы указать цвет подсветки на основе слова. Так length() а также function() должны привести к различным цветам для length а также function,

Редактировать: до сих пор я использую следующую строку в моем файле синтаксиса r.vim, чтобы соответствовать действительному имени объекта R с последующим ((:

syn match rFunction "\(\(\a\|[.][._\a]\)[._\a0-9]*\)\+\ *("

И это прекрасно работает, но я не хочу выделять это ( в конце, но лучше установить его по умолчанию.

1 ответ

Решение

Поскольку у вас уже есть соответствующий шаблон, я думаю, вы можете использовать смещение для выделения. От vim документация:

                    *:syn-pattern-offset*
The pattern can be followed by a character offset.  This can be used to
change the highlighted part
...
Example:
  :syn match String  /"[^"]*"/hs=s+1,he=e-1
    some "string" text
          ^^^^^^        highlighted

Поэтому я думаю, что это должно сделать работу:

syn match rFunction "\(\(\a\|[.][._\a]\)[._\w]*\)\+\ *("he=e-1

Вы также можете использовать lookaheads, что было бы предпочтительнее, так как это позволяет избежать попадания некоторых элементов в совпадение:

syn match rFunction "\(\(\a\|[.][._\a]\)[._\w]*\)\+\ *[(]\@="
Другие вопросы по тегам