sexta-feira, 3 de abril de 2009

Avaliando e executando uma expressão no vim

Use :
:execute {expressão}
A expressão é avaliada pelo vim e o string resultante é executado como um comando Ex.

Exemplo, saltar para uma tag cujo valor está dentro de uma variável:
:execute "tag " . tag_name
O comando concatena ('.') 'tag ' com o valor em 'tag_name'. Supondo que a variável tem 'get_cmd', o comando que será executado é:
:tag get_cmd
O comando ':execute' só pode executar comandos dois-pontos (':').
O comando ':normal' executa comandos no modo normal. No entanto, seu argumento não é uma expressão mas caracteres de comando literais:
:normal gg=G
Isto salta para a primeira linha, e formata todo arquivo com o comando '='.

Para fazer o comando ':normal' trabalhar com uma expressão, combine-o com o ':execute':
:execute "normal " . normal_commands
A variável 'normal_commands' deve conter os comandos do modo normal.
Esteja certo que o comando normal esteja completo, caso contrário o vim abortará o comando.

Exemplo:
:execute "normal Inew text \<Esc>"
isto insere 'new text' na linha corrente. Note o uso da chave especial '\<Esc>'. Isso evita de entrar o caracter real <Esc> dentro do script.

Se não quiser executar o string, mas avalia-lo para obter o valor da expressão, você pode usar a função 'eval()':
:let optname = "path"
:let optval = eval('&' . optname)
Um '&' é colocando antes de 'path', assim o argumento para 'eval()' é '&path'. O resultado é o valor da opção 'path'.

O mesmo pode ser feito com:
:exe 'let optval = &' . optname

0 comentários:

Postar um comentário