Sintaxe do Vim realce campos delimitados por comprimento

4

Estou tentando gravar um arquivo de sintaxe vim para arquivos de despejo SVN. A parte que não consigo descobrir é a seguinte seção:

Fooprop: Val1
Text-content-length: 20
Barprop: Val2
                                       <- Blank line
abcdefghi
abcdefghi

Next-item-prop: Val3

Como faço para configurar uma regra de sintaxe que diz "N caracteres após a primeira linha em branco após 'Comprimento do conteúdo de texto: N', onde N é um número"?

    
por Eitan 10.05.2013 / 19:09

1 resposta

2

Você precisaria referenciar o comprimento do texto em uma expressão regular diferente. Como o Vim (ao contrário do Perl) não permite a avaliação de expressões do Vimscript dentro de expressões regulares, você precisa recorrer a programação , isto é, construir as regras de sintaxe rapidamente:

:execute 'syntax match svndumpData /^\n\_.\{' . length . '}/'

Esse esboço simples usa \_. para corresponder a qualquer caractere (incluindo novas linhas) por \{N} times. Você precisa ter cuidado com o comprimento da nova linha (CR-LF vs. LF) e codificações (o número de caracteres não é necessariamente igual ao número de bytes para representá-los!)

Isso funciona porque um plug-in de sintaxe é originado em cada detecção e a sintaxe se aplica ao buffer atual.

Alternativa

Como isso é bastante complexo e pode não funcionar se você tiver uma contagem de bytes (para a qual não existe nenhum átomo de expressão regular) em vez do tamanho do caractere, sempre há a solução pragmática de 80% que ignora a contagem de caracteres contidos e define região de sintaxe nas seções da propriedade circundante. Não será correto em todos os casos, mas provavelmente funciona bem para a maioria dos dados.

    
por 14.05.2013 / 13:53

Tags