região de sintaxe vim: Como usar strings como padrões de início / fim?

1

Eu quero algo assim em um dos meus arquivos de sintaxe:

let s:mask1="some chars here"
let s:mask2="and some chars here"

syntax region MyOwnRegionName start=s:mask1 end=s:mask2

(a idéia é usar a variável s:mask1 em várias definições de regiões.)

Mas isso não funcionaria. Relatórios do Vim após erros:

E402: Garbage after pattern: s:mask1 end=s:mask2
E475: Invalid argument: bmlRecsOps start=s:mask1 end=s:mask2

Consegui contornar este problema:

execute 'syntax region MyOwnRegionName start=/'.s:mask1.'/ end=/'.s:mask2.'/'

Mas eu não entendo muito bem por que e como isso funciona. Não tenho certeza se é um caminho certo. Preparando uma string que contém um comando - há algo errado sobre isso. Ou é?

    
por lesnik 05.11.2013 / 19:16

1 resposta

2

As regras de avaliação do Vim não são como as encontradas nas linguagens de programação comuns. A maioria dos Ex-comandos não aceita variáveis, mas espera valores literais. Isso torna mais conveniente a emissão interativa dos comandos: nenhuma citação de seqüência de caracteres é necessária.

No Vimscript, como você já descobriu corretamente, você precisa usar :execute para obter as variáveis do Vimscript avaliadas no comando. Ele avalia todos os seus argumentos e, em seguida, executa a seqüência resultante como um comando Ex. Se a concatenação de strings é muito desajeitada, você também pode usar printf() para colocar o conteúdo da variável no comando.

    
por 06.11.2013 / 08:52