Realce no vim: distinguir as linhas com o delimitador de comentários seguido por uma string especial

2

Destacando no vim: distinguir as linhas com o delimitador de comentários seguido por uma string especial

Em alguns casos, por exemplo, com os scripts para clusters HPC, ao usar SGE, TORQUE ou Slurm, podemos ter um script de shell (como bash) com linhas de comentário denotadas por #, mas comandos de grade em linhas com #$ , #PBS ou #SBATCH .

O que é uma maneira fácil de manter o mesmo realce usado para o bash, mas excluindo #SomeString de ser considerado um comentário?

    
por myradio 28.06.2018 / 17:07

1 resposta

2

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.

    
por 22.10.2018 / 11:09