Comece examinando as definições dos comentários no script de sintaxe do shell:
:syn list shComment
--- Syntax items ---
shComment xxx match /^\s*\zs#.*$/ contains=@shCommentGroup
match /\s\zs#.*$/ contains=@shCommentGroup
match /#.*$/ contained contains=@shCommentGroup
links to Comment
Estender cluster de sintaxe
Lá, você vê quais padrões de comentários precisam ser substituídos. Mas espere! Esse script de sintaxe oferece um mecanismo de extensão por meio do :help :syn-cluster
; o contains=@shCommentGroup
syn match shHPC "PBS" contained
Isso destacaria PBS
em qualquer lugar dentro de um comentário. Se coisas adicionais puderem seguir, anexe .*$
ao padrão. Se a palavra-chave PBS
precisar seguir diretamente o #
, adicione uma asserção lookbehind positiva :
syn match shHPC "#\@<=PBS" contained
Você pode usar todas as outras palavras-chave usando comandos :syn match
adicionais ou usando ramificações de expressão regulares: "#\@<=\(PBS\|SBATCH\|...\)"
.
Por fim, esse novo grupo de sintaxe deve ser incluído no cluster de sintaxe para receber comentários e receber um destaque para que você o veja:
syn cluster shCommentGroup add=shHPC
hi link shHPC PreProc
Defina a substituição da sintaxe por correspondência
Alternativamente, você pode querer pular o cluster e sobrescrever a sintaxe do comentário. Por exemplo, quando as palavras-chave especiais só podem aparecer no início da linha, mas agora após os comandos Bash. Ou se você não puder suportar o fato de que o método de cluster manterá o #
no realce original.
syn match shHPC "^\s*\zs#PBS"
hi link shHPC PreProc
Ativação
Como esses comandos estendem a sintaxe interna, eles precisam ser executados após eles. O lugar para isso é ~/.vim/after/syntax/sh.vim
. Se você quiser ativá-los apenas condicionalmente para determinados projetos, você pode escrever uma detecção de tipo de arquivo que define uma variável de marcador, por exemplo, b:is_HPC
e, em seguida, faça o código acima verificar esse sinalizador.