Выделение в vim: различать строки с разделителем комментариев, за которым следует специальная строка

попробуйте sudo aptitude install kde-desktop

2
28.06.2018, 18:07
1 ответ

Начните с изучения определений комментариев в сценарии синтаксиса оболочки:

: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, а затем заставьте приведенный выше код проверять этот флаг.

2
27.01.2020, 22:09

Теги

Похожие вопросы