Configuração de Indentação no Vim - Tabs e Espaços

Texto abordando Tabs e Espaços, e como isto funciona no Vim.

[ Hits: 28.603 ]

Por: Fernando Luis Basso em 23/01/2012


Configuração de Indentação no Vim - Tabs e Espaços



Introdução

Há duas maneiras de indentar um código fonte:

1. Com Tabs reais, também chamado de 'hard tabs'.
2. Com espaços no lugar de Tabs (sim, o Vim pode ser configurado para substituir uma tabulação por um certo número de espaços).

Há vantagens e desvantagens em cada um dos métodos. Há alguns artigos que discutem o assunto na Web, embora parece que mais pessoas preferem Espaços no lugar de Hard Tabs, mas isso é pura questão de gosto, e cada caso é um caso.

Basicamente, temos as opções:
  • 'tabstop': Altera a largura da tabulação (Tabs reais).
  • 'expandtab': Causa espaços serem usados/inseridos no lugar de caracteres Tab.
  • 'softtabstop': Configura detalhadamente a quantidade de espaço a serem inseridos quando a tecla Tab é pressionada.
  • 'shiftwidth': Afeta o uso de ">>", "<<", modo normal, "Ctrl-t" e "Ctrl-d" no Modo Insert, além de ter influência em como indentação automática funciona.

Para iniciar, execute isso no Vim:

:set list
:set listchars=tab:T_


A partir de agora, toda vez que o Vim "enxergar" um Tab real, ele vai mostrar algo como "T_____" no lugar do texto, para que o Tab fique visualmente percebível.

Pra desabilitar basta fazer:

:set nolist

Indentação com Hard Tabs Apenas

Por padrão, o Vim vem configurado com:

tabstop = 8
softtabstop = 0
shiftwidth = 8
noexpandtab


Independente de sua configuração, digite esta linha para testar (simplesmente coloque os valores default):

:set tabstop=8 softtabstop=0 shiftwidth=8 noexpandtab


O que acontece então?

1. Com esta configuração, pressionar a tecla Tab no modo 'Insert' insere um caractere Tab real, com largura de 8 colunas.
2. Neste caso, deletar o caractere Tab (deleta 8 colunas), o que visualmente parece que vários espaços foram deletados ao mesmo tempo.
3. No modo Normal, usar: >> e <> e <> e <> e <<, insere ou deleta 4 espaços. O mesmo ocorre ao se pressionar 'Ctrl-t' e 'Ctrl-d' no modo 'Insert'.

Espaços

Mas note o 'NOexpandtab':

:set tabstop=8 softtabstop=4 shiftwidth=4 noexpandtab


Agora, 'noexpandtab' não está habilitado, e portanto, pressionar insere um Tab real (e não espaços no lugar do Tab). Se pressionar Tab, e 'tab=8', um Tab terá largura de 8 colunas.

Como você sabe, ">>", "<>" duas vezes. Você vai notar que ele se transforma em um Tab real. Isso porque "tabstop=8" e "shiftwidth=4", então, 4 + 4 = 8. Se "tabstop=12", por exemplo, então pressionar ">>" 3 vezes se gera uma Tab real, porque 4 + 4 + 4 = 12.

Isto tudo acontece porque 'softtabstop' tem precedência sobre 'tabstop'. Então, quando pressionamos, por exemplo, "Ctrl-t" uma vez, ele insere 4 espaços, mas quando pressionamos "Ctrl-t" uma segunda vez, ele diz: "Hmm, isso está igual à "largura" do 'tabstop', e então os 8 espaços são deletados e um Tab real é inserido. Quando usamos , "Ctrl-d" ou "<<", o processo inverso ocorre.

Misturando

Vamos deixar 'tabstop' igual a 4, com 'expandtab' desabilitado:

:set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab


Agora, como 'tabstop' está igual 'shiftwidth' e 'expandtab', quando, ">>" ou "Ctrl-t" for pressionado, uma Tab real será inserida pois o Vim notou que as configurações estão iguais. Quando as configurações estão iguais.

Note que Tabs reais e espaços antigos no arquivo continuam sendo o que eram.

O que pode mudar é o tamanho das Tabs reais, mas não o fato de serem Tabs reais ou não. O que já era Tab real continua sendo Tab real, e o que era (grupos) de espaços continuam sendo (grupos) de espaços (grupos de espaços que por ventura tenham sido inseridos em lugar de Tabs reais).

Possíveis Escolhas

- Hard Tabs (Tabs Reais)

Quem prefere trabalhar com Tabs reais, uma boa escolha é deixar 'tabstop' igual 'shiftwidth', pois eles trabalharão de maneira consistente e homogênea. Espaços não serão usados.

- Espaços em vez de Tabs Reais

Deixar 'softtabstop' igual a 'shiftwidth', assegura que ">>", "<<", "Ctrl-t" e "Ctrl-d" adicionem e removam Tabs (não reais, pois agora é substituída por espaços) com o mesmo comportamento de se adicionar e deletar tabs pressionando a tecla 'e' . Ou seja, todos eles vão adicionar ou remover o mesmo número de espaços - irão funcionar de forma homogênea.

Pode-se também, neste caso (e alguns acham aconselhável), deixar 'tabstop' com o mesmo valor de 'shiftwidth' e 'softtabstop'.

Notas Finais

Saiba que o Vim permite configurar tudo isto de acordo com o 'filetype'. Por exemplo, é possível configurar que arquivos ".html" utilizem 2 espaços no lugar do Tab, um arquivo em "C" utilize 4 espaços no lugar de um Tab, e ainda, quando um arquivo Bash for editado, um Tab real de 6 colunas seja usado. Ou seja, quando o arquivo é aberto, o Vim usa as configurações predefinidas automaticamente.

Alguns exemplos

Vamos criar os diretórios necessários:

mkdir --parents ~/.vim/after/ftplugin/

Para HTML, criar o um arquivo chamado "html.vim" dentro do último diretório criado:

vim ~/.vim/after/ftplugin/html.vim

E coloque o seguinte conteúdo dentro do arquivo:

set softtabstop=2 expandtab shiftwidth=2


Para CSS, criar o arquivo "css.vim", no mesmo diretório que do exemplo anterior:

vim ~/.vim/after/ftplugin/css.vim

E cole o seguinte conteúdo:

set softtabstop=4 expandtab shiftwidth=4


Para "bash", com Hard Tabs:

vim ~/.vim/after/ftplugin/bash.vim

E cole:

set tabstop=6 softtabstop=6 shiftwidth=6 noexpandtab


Dica final

Se você optar por usar espaços no lugar de Tabs, há uma maneira de inserir Tabs reais sem ter que mudar temporariamente a configuração. Isto é conseguido inserindo-se caracteres não imprimíveis literalmente.

No Vim, isto é muito fácil. Basta pressionar "Ctrl-v" no modo 'Inserte', e então pressionar a tecla Tab em seguida.

- Passo a passo:
  • vim: Abre o Vim no terminal (poderia ser o gvim).
  • i: Entra no modo 'insert' na posição onde está o cursor.
  • Ctrl-v: Pressionar a combinação "Ctrl-v". Vai aparecer um caractere parecido com um "^". Neste momento, o Vim está esperando você digitar o caractere que termina a sequência, no nosso exemplo, um . Pressione Tab.
  • hello world: Escreva "hello world", por que este é um encantamento que garante que você aprenda o conteúdo. Sempre foi assim em todas as linguagens, e esta é a razão. São palavras mágicas.

Como mesmo exemplo, você poderia inserir um caractere ou literalmente no texto.

Aqui está o arquivo que fiz no Vim, mas convertido para ".html". Tive que renomear para ".pdf" para fazer o upload. Depois de baixar, troque a extensão para ".html" novamente e abra no seu navegador favorito. Está bem colorido, facilitando a leitura.

Referências

No Vim:
:help 'softtabstop'
:help 'tabstop'
:help 'shiftwidth'
:help 'expandtab'

Sites:
Previamente publicado em:
   

Páginas do artigo
   1. Configuração de Indentação no Vim - Tabs e Espaços
Outros artigos deste autor

Prevenindo acidentes com o comando RM

Expressões regulares no Bash : parte I

Leitura recomendada

Dual boot no Fenix Extreme Linux

Instalar Slackware 12.2 no Dell Inspiron 1525

Explorando as possibilidades do XFree86

Instalação do Dspace no CentOS

Filtros de Texto no Linux

  
Comentários
[1] Comentário enviado por matheuss32 em 04/08/2013 - 05:09h

Valeu !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts