Синтаксическое ключевое слово vim только выделяет несвязанные вхождения - PullRequest
0 голосов
/ 04 июля 2018

У меня есть файл синтаксиса со следующими определениями:

syn keyword pythonBuiltinFunc           __import__ abs all any
                                        \ bin bool bytearray
                                        \ callable chr classmethod compile complex
                                        \ delattr dict dir divmod
                                        \ enumerate eval
                                        \ filter float format frozenset
                                        \ getattr globals hasattr hash hex
                                        \ id input int isinstance issubclass iter
                                        \ len list locals
                                        \ map max min next
                                        \ object oct open ord pow property
                                        \ range repr reversed round
                                        \ set setattr slice sorted
                                        \ staticmethod str sum super
                                        \ tuple type vars zip
                                        \ nextgroup=pythonArgs skipwhite

Проблема в том, что это соответствует вхождению next (например), даже когда на это имя ссылаются как на атрибут объекта, как в obj.next, и это портит подсветку.

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

Есть ли у кого-нибудь мысли о том, как применять приведенные выше определения, но исключить патологический случай, о котором я упоминал ниже? Я предполагаю, что я позволил бы пробел в шаблоне слова, но игнорировал бы его в совпадении?

1 Ответ

0 голосов
/ 23 октября 2018

Чтобы исключить эти встроенные атрибуты объекта с помощью правил сдерживания синтаксиса Vim, вам необходимо определить шаблон для обнаружения объектов; Я думаю, что это невозможно.

Таким образом, вы преобразуете эти ключевые слова в :syntax match и добавляете к нему проверочное утверждение , чтобы избежать совпадения как часть obj.builtin, например:

:syntax match pythonBuildinFunc "\.\@<!\<next\>"
...