Итак, для всех, кому интересно, кажется, что vim (8.1 на MacOS) имеет ошибочные группы синтаксиса. В итоге я заставил его работать с:
syn match pythonFunctionDeclaration "\v\(.+\):" contains=ALL transparent
syn match pythonArguments "\v\(\zs.+\ze\)" contained contains=ALL
Я не знаю, почему другие вещи, которые я пробовал, не работали, но это выделит python аргументы функции (и он оставит в покое уже существующие группы синтаксиса).
EDIT: я узнал больше. Итак, проблема с регулярным выражением для синтаксических групп состоит в том, что перекрытие между различными шаблонами игнорируется. Например:
/\vdef|def something
будет соответствовать части 'def' в 'def something', потому что vim пропустит часть 'something', потому что она уже соответствует первому шаблону. Я не знаю, имело ли это какое-то значение, проверьте this .
Возвращаясь к улучшению выделения, проблема с синтаксическими группами выше заключается в том, что некоторые операторы if и циклы for также будут соответствие. Однако это работает:
syn clear pythonFunction
syn match pythonFunction "\h\w*"
nextgroup=pythonFunctionDeclaration display contained
syn match pythonFunctionDeclaration "\v\(.+\):" contains=pythonArguments transparent contained
syn match pythonArguments "\v\(\zs.+\ze\)" contained contains=ALLBUT,pythonFunction
hi def link pythonArguments Special
Это сделает нашу специальную группу синтаксиса только после функций.
TLDR; добавьте второй (более длинный) блок кода к себе ~ / .vim / after / syntax / python .vim файл, чтобы python аргументы функции были выделены так же, как выделена группа специального синтаксиса.