No Vim, por que pesquisar “/ A \ n \ zsB” funciona, mas não realçar a sintaxe “: syn match Statement 'A \ n \ zsB'”?

0

Suponha o seguinte arquivo de texto:

A
B

Ou, em outras palavras, um arquivo contendo apenas a string A\nB .

Vamos ver se consigo corresponder qualquer B precedido por A e uma nova linha. Simples o suficiente. Eu posso fazer isso com sucesso com um / -search: /A\n\zsB . B agora está destacado.

Mas o que eu realmente quero fazer é aplicar a sintaxe destacando para B . Assim, eu tento :syn match Statement 'A\n\zsB' , mas isso não faz nada. Alguém tem uma ideia do porquê?

(E apenas para antecipar sugestões de que talvez eu não tenha ativado o realce de sintaxe corretamente: :syn match Statement 'A\n\B' funciona como esperado: A e B mudam de cor.)

    
por Will 27.03.2014 / 04:29

1 resposta

1

Este é um comportamento documentado. Veja :help :syn-multi-line , citado aqui:

When using a start pattern with an offset, the start of the match is not
allowed to start in a following line.  The highlighting can start in a
following line though.  Using the "\zs" item also requires that the start
of the match doesn't move to another line.

A solução é especificar onde o realce começa, e não onde a partida começa. Por exemplo:

:syn match Statement 'A\nB'hs=e-1

Veja :help :syn-pattern-offset .

    
por 27.03.2014 / 04:38