Primeiramente, não use a Tabchave no Vim para recuo manual. O Vim possui um par de comandos no modo de inserção para aumentar ou diminuir manualmente a quantidade de indentação. Esses comandos são Ctrl-Te Ctrl-D. Esses comandos observam os valores de tabstop
, shiftwidth
e expandtab
, e mantêm a mistura correta de espaços e guias (número máximo de guias seguido por qualquer número necessário de espaços).
Em segundo lugar, essas teclas de indentação manual não precisam ser muito usadas de qualquer maneira se você usar a indentação automática.
Se, em Ctrl-Tvez de Tabincomodá-lo, você pode remapear:
:imap <Tab> ^T
Você também pode remapear Shift-Tabpara Ctrl-Dexecutar o deindent:
:imap <S-Tab> ^D
Aqui ^ T e ^ D são caracteres de controle literais que podem ser inseridos como Ctrl-VCtrl-T.
Com esse mapeamento, você ainda pode digitar literal Tab no buffer usando Ctrl-VTab. Observe que, se você fizer isso, mesmo se :set expandtab
estiver ativado, receberá um caractere de tabulação não expandido.
Um efeito semelhante ao <Tab>
mapa é obtido usando :set smarttab
, o que também faz com que o backspace na frente de uma linha se comporte de maneira inteligente.
No smarttab
modo, quando Tabusado não no início de uma linha, ele não tem significado especial. Isso é diferente do meu mapeamento acimaTab para Ctrl-T, porque um Ctrl-Tusado em qualquer lugar de uma linha (no modo de inserção) aumentará o recuo dessa linha.
Outros mapeamentos úteis podem ser:
:map <Tab> >
:map <S-Tab> <
Agora podemos fazer coisas como selecionar algumas linhas e pressionar Tab para recuá-las. Ou pressione Tabduas vezes em uma linha (no modo de comando) para aumentar seu recuo.
Se você usar os comandos adequados de gestão de recuo, em seguida, tudo é controlado por três parâmetros: shiftwidth
,tabstop
e expandtab
.
O shiftwidth
parâmetro controla o tamanho do recuo; se você quiser quatro recuos de espaço, use:set shiftwidth=4
ou a abreviação :set sw=4
.
Se apenas isso for feito, o recuo será criado usando uma mistura de espaços e tabulações, porque noexpandtab
é o padrão. Use :set expandtab
. Isso faz com que os caracteres de tabulação digitados no buffer sejam expandidos para espaços e para o recuo gerenciado pelo Vim use apenas espaços.
Quando expandtab
está ativado e se você gerencia seu recuo através de todos os mecanismos adequados do Vim, o valor de tabstop
torna-se irrelevante. Ele controla como as guias aparecem se ocorrerem no arquivo. Se você tiver set tabstop=8 expandtab
e depois introduzir uma guia rígida no arquivo Ctrl-VTab, ela produzirá um alinhamento para a próxima posição da guia baseada em 8 colunas, como de costume.