quarta-feira, 8 de abril de 2009

Comentários no vim script e suas armadilhas

O caracter '"' inicia um comentário. Tudo depois e incluindo este carácter até o
fim de linha é considerado um comentário e é ignorado, exceto por comandos
que não consideram comentários, como mostrado a seguir.

Um comentário pode iniciar em qualquer posição de caracter da linha. Existe um
pequeno problema com comentários para alguns comandos:
:abbrev dev development           " shorthand
:map <F3> o#include " insert include
:execute cmd " do it
:!ls *.c " list C files
A abreviação 'dev' será expandida para será expandida para:
'development " shorthand'
O mapeamento de <F3> será na realidade a linha inteira após 'o#...' incluido:
'" insert include'
O comando 'execute' dará um erro.
O comando '!' enviará tudo após ele para o shell, causando um erro caracter '"'
sem correspondente.

Não pode haver nenhum comentário após os comandos :map, :abbreviate, :execute, e
! (existem mais uns poucos comandos com essa restrição). Para os 3 primeiros há
um truque:
:abbrev dev development|" shorthand
:map <F3> o#include|" insert include
:execute cmd |" do it
Com o caracter '|' o comando é separado do próximo. E o próximo comando é
somente um comentário. Para o último comando você precisa fazer duas coisas:
':execute' e usar '|':
:exe '!ls *.c' |" list C files
Note que não há espaços antes do '|' nos comandos de abreviação e mapeamento. Para estes
comandos, qualquer carácter até o final da linha é incluído. Como consequência
deste comportamento você nem sempre vê que espaços no final estão incluídos.
:map <F4> o#include         
Para detectar o problema ative a opção 'list' quando editando o arquivo vimrc.

No Unix, existe um modo especial de comentar uma linha, que permite fazer um
script Vim executável:
#!/usr/bin/env vim −S
echo "this is a Vim script"
quit
O comando '#' por si só lista a linha com o número da linha. Adicionando um '!'
muda para que ela não faça nada, para que você possa adicionar o comando de
shell para executar o resto do arquivo.

A seguir temos um comando 'unmap' que não funciona porque ele tenta desmapear ',ab', mas a
sequencia mapeada foi definida com ',ab ' com um espaço extra no final.
:map  ,ab o#include
:unmap ,ab
E isto é o mesmo que acontece quando se usa um comentário depois do comando
'unmap':
:unmap ,ab " comment
Aqui o comentário será ignorado, todavia o vim tentará mapear ',ab "', o
qual não existe. Reescreva como:
:unmap ,ab|        " comment

0 comentários:

Postar um comentário