Начните с изучения определений комментариев в сценарии синтаксиса оболочки:
:syn list shComment
--- Syntax items ---
shComment xxx match /^\s*\zs#.*$/ contains=@shCommentGroup
match /\s\zs#.*$/ contains=@shCommentGroup
match /#.*$/ contained contains=@shCommentGroup
links to Comment
Здесь вы видите, какие шаблоны для комментариев необходимо переопределить. Но ждать! Этот синтаксический скрипт предлагает механизм расширения через:help :syn-cluster
;contains=@shCommentGroup
syn match shHPC "PBS" contained
Это выделитPBS
в любом месте внутри комментария. Если могут последовать дополнительные данные, добавьте .*$
к шаблону. Если ключевое слово PBS
должно следовать непосредственно за #
,добавить положительный просмотр назад:
syn match shHPC "#\@<=PBS" contained
Все остальные ключевые слова можно использовать с помощью дополнительных :syn match
команд или с помощью ветвей регулярных выражений:"#\@<=\(PBS\|SBATCH\|...\)"
.
Наконец, эта новая синтаксическая группа должна быть включена в синтаксический кластер для комментариев и выделена, чтобы вы ее видели:
syn cluster shCommentGroup add=shHPC
hi link shHPC PreProc
В качестве альтернативы вы можете пропустить кластер и перезаписать синтаксис комментария. Например, когда специальные ключевые слова могут появляться только в начале строки, но уже после Bash-команд. Или если вас не устраивает тот факт, что кластерный метод сохранит #
в исходной подсветке.
syn match shHPC "^\s*\zs#PBS"
hi link shHPC PreProc
Поскольку эти команды расширяют встроенный -синтаксис, их необходимо выполнять после них. Место для этого ~/.vim/after/syntax/sh.vim
. Если вы хотите активировать их только условно для определенных проектов, вы можете написать обнаружение типа файла , которое устанавливает переменную маркера, например. b:is_HPC
, а затем заставьте приведенный выше код проверять этот флаг.