The source content for blog.juliobiason.me
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.0 KiB

+++ title = "12. Modelines" date = 2015-12-22 weight = 3072 +++

Essa é a parte em que você ignora seus arquivos de configuração.

Bom, agora você sabe como configurar seu VIM, mudar configurações baseadas no tipo de arquivo... Mas o que fazer se um arquivo tem uma configuração completamente diferente do resto?

A solução são modelines. Modelines são linhas que você pode adicionar no seu arquivo e o VIM, quando carregar o arquivo, irá mudar suas configurações baseadas nesta linha.

A sintaxe da linha é, simplesmente: vim: set {configurações}:.

"Mas é um código fonte e se eu colocar um 'vim' no meio, o compilador vai reclamar!", você deve estar pensando agora. Acontece que o VIM procura uma linha válida em qualquer lugar, desconsiderando a sintaxe atual. Se você colocar o modeline dentro de um comentário, o VIM ainda vai encontrar e ainda vai processar o modeline e ainda vai trocar as configurações do editor (apenas para aquele arquivo).

Por exemplo, para garantir que meus templates Jinja fiquem com a sintaxe correta (usando a sintaxe de templates do Django), eu tenho colocado, como última linha do arquivo

{# vim: set ft=htmldjango: #}

"ft", no caso, é o nome curto para "filetype", que define o tipo de arquivo que está sendo usando e qual sintaxe será utilizada. E o par {# e #} são comentários do template e completamente ignorados no resultado final.

Assim como vimos antes, várias configurações podem ser usadas no mesmo set. Usando o exemplo acima, se eu quisesse que meus templates usassem tabulações ao invés de espaços para identação mas fossem apenas 2 espaços por tabulação, eu poderia colocar, no final do arquivo:

{# vim: set ft=htmldjango noet ts=2 sts=2 sw=2: #}

O VIM ainda aceita que as opções sejam separadas em vários comandos, com a adição de ":":

{# vim: set ft=htmldjango:set noet:set ts=2:set sts=2:set sw=2: #}

Mas realmente não faz sentido, faz?

E apenas um aviso: Algumas distribuções Linux desligam modelines no arquivo global (adicionando set nomodeline no arquivo global) e, assim, modelines são completamente ignorados, sob a desculpa de "segurança". Tentando descobrir o porque descobri o seguinte: O único comando que pode ser usado em modelines é "set", ou seja, não é possível colocar um modeline que abra outro arquivo, ou mude o diretório atual ou qualquer outra coisa; nem todas as configurações pode ser alteradas (infelizmente, o help do VIM não lista quais são e quais não são permitidas); e, aparentemente, a pior forma de "ataque" seria alguém colocar um "textwidth" e seu código ficar torto na primeira edição. Se você achar que modelines não estão sendo executados, você pode adicionar no seu vimrc set modelines para que modelines sejam processados (ou troque por uma distribuição que não tenha configurações que não fazem sentido).

{{ chapters(prev_chapter_link="./11-02-gvimrc", prev_chapter_title="Meu .gvimrc", next_chapter_link="./13-tags", next_chapter_title="Tags") }}