sexta-feira, 17 de abril de 2009

Definindo como será sincronizada a tela no arquivo de sintaxe

Os compiladores analisam um arquivo a partir do início. Para o Vim é mais complicado pois deve começar no meio aonde a edição está sendo feita. Então, como ele sabe aonde ele está?

O segredo é o comando ':syntax sync'. Ele diz ao Vim como descobrir aonde está.
Por exemplo, o comando seguinte diz ao Vim para procurar atrás pelo início
ou fim de um comentário no estilo C e começar a colorização de sintaxe a partir
de lá:
:syntax sync ccomment
Você pode ajustar este processamento com alguns argumentos. O argumento
'minlines' diz ao Vim o número mínimo de linhas para procurar atrás, e
'maxlines' diz ao editor o número máximo de linhas para pesquisar.

Por exemplo, o seguinte comando diz ao Vim para olhar 10 linhas antes do topo da
tela:
:syntax sync ccomment minlines=10 maxlines=500
Se ele não consegue descobrir aonde ele está naquele espaço, ele começa olhar
mais e mais para atrás até que ele descubra o que fazer. Mas ele não olha atrás não mais que 500 linhas. (Um 'maxlines' grande torna lento o processamento. Um
valor pequeno pode causar a sincronização falhar.)

Para fazer a sincronização um pouco mais rápida, diga ao Vim quais itens de
sintaxe que podem ser pulados. Todo 'match' e 'region' que somente precisa ser usado
quando estiver realmente mostrando o texto pode ser dado o argumento 'display'.

Por default, o comentário a ser encontrado será colorizado como parte do grupo
de sintaxe 'Comment'. Se você colorizar as coisas de outro modo, você pode
especificar um outro grupo de sintaxe:
:syntax sync ccomment xAltComment
Se sua linguagem de programação não tem comentários estilo C dentro dele, você
pode tentar outro modo de sincronização. O modo mais simples é dizer ao Vim para
retornar um número de linhas e tentar descobrir as coisas a partir de lá.
O seguinte comando diz ao Vim para voltar atraś 150 linhas e começar a analisar a
partir de lá:
:syntax sync minlines=150
O valor grande de 'minlines' pode fazer o Vim ficar lento, especialmente quando percorrendo o arquivo para trás.
Finalmente, você pode especificar um grupo de sintaxe a ser procurado usando
este comando:
:syntax sync match {sync−group−name}
        \ grouphere {group−name} {pattern}
Isto diz ao Vim que quando ele ver o {pattern} o grupo de sintaxe chamado de {group-name} começa exatamente depois do padrão dado.

O {sync−group−name} é usado para dar um nome para essa especificação de
sincronização. Por exemplo, a linguagem de script 'sh' começa com um comando
if [ −−f file.txt ] ; then ~
        echo "File exists" ~
fi
Para definir um diretiva 'grouphere' para esta sintaxe, você usa o seguinte
comando:
:syntax sync match shIfSync grouphere shIf "\<if\>"
O argumento 'grouphere' diz ao Vim que o padrão termina o grupo. Por exemplo, o
fim do grupo 'if/fi' é o seguinte:
:syntax sync match shIfSync groupthere NONE "\<fi\>"
Neste exemplo, o 'NONE' diz ao Vim que você não está em nenhum região especial
de sintaxe. Em particular, você não está num bloco 'if'.

Você pode também definir matches e regions sem nenhum argumento 'grouphere' ou
'groupthere'.

Estes grupos são para grupos de sintaxe pulados durante a sincronização. Por
exemplo, o seguinte comando pula pula sobre qualquer coisa dentro de '{}', mesmo se ele normalmente correspondesse com outro método de sincronização:
:syntax sync match xSpecial /{.*}/

1 comentários:

voyeg3r disse...

Suas dicas ficariam ótimas aqui:
http://code.google.com/p/vimbook/

Postar um comentário