quarta-feira, 8 de abril de 2009

Capturando as exceções de execução de um vim script

O vim script permite capturar exceções e dar um tratamento para elas.

Por exemplo:
:try
: read ~/templates/pascal.tmpl
:catch /E484:/
: echo "Sorry, the Pascal template file cannot be found."
:endtry
O comando ':read' falhará se o arquivo de template não for encontrado. Ao invés
de gerar uma mensagem de erro, o código captura o erro e dá uma mensagem mais
clara.

Para os comandos entre ':try' e ':except' os erros são tornados exceções.
Uma exceção é um string. No caso de um erro o string contém a mensagem de erro e
cada mensagem de erro tem um número.
Neste caso, a mensagem capturada contém 'E484:'. Este número é garantido ser
sempre o mesmo (o texto pode mudar, por exemplo, ser traduzido).

Quando o comando ':read' causa outra erro, o padrão 'E484:' não terá ocorrência.
Assim essa exceção não será capturada e resulta na mensagem de erro usual.

Você pode ser tentado a fazer isso:
:try
: read ~/templates/pascal.tmpl
:catch
: echo "Sorry, the Pascal template file cannot be found."
:endtry
Isto significa que todos erros serão capturados. Mas você não verá erros que são
úteis, tais como: "E21: Cannot make changes, 'modifiable' is off".

Outro mecanismo útil é o comando ':finally':
:let tmp = tempname()
:try
: exe ".,$write " . tmp
: exe "!filter " . tmp
: .,$delete
: exe "$read " . tmp
:finally
: call delete(tmp)
:endtry
Isto filtra as linhas do cursro até o final do arquivo através do comando
'filter', o qual leva um argumento de nome de arquivo.
Não importa se a filtragem funciona, se algo vai errado entre ':try' e
':finally' ou se o usuário cancela a filtragem pressionando <Ctrl-C>, o 'call
delete(tmp)') é sempre executado. Isto assegura que o arquivo temporário não
fica para trás.

0 comentários:

Postar um comentário