Decidi mudar o tamanho da minha guia de 4 para 2, porque não? Qualquer pessoa que queira ver o código certamente pode usar suas preferências.
Porém, uma pergunta.
Se eu apertar a tecla tab, ele insere 2, mas o recuo automático do Vim ainda está colocando 4. O que eu mudo para fazer esse 2?
Outra questão não relacionada: qual estilo de recuo é melhor para C e linguagens semelhantes? Tenho usado 1TBS, mas há muitos para escolher. Algum deles é mais profissional ou preferido?
Responder1
Tente definir ' shiftwidth
' com o mesmo valor de ' tabstop
'. Melhor ainda, se você estiver usando uma versão recente do Vim, defina ' shiftwidth
' como 0 e o padrão será o que ' tabstop
' estiver definido.
Responder2
Opções de recuo do Vim
O Vim usa principalmente 3 configurações quanto ao tamanho do recuo:
tabstop
,ts
: quando o Vim encontra uma tabulação em um arquivo que você está abrindo, ele exibe a tabulação como {ts} espaços (vejaajuda tabstop, ou digite:help tabstop
Vim).softtabstop
,sts
: quando você está editando um arquivo e pressiona a tecla tab, o Vim usa esta configuração para definir a largura da tabulação inserida (vejaajuda do softtabstop, ou digite:help softtabstop
Vim).shiftwidth
,sw
: o número de espaços que o Vim usa ao recuar, usando material de autoindent ou os comandos usuais>>
, .<<
Como Heptite percebeu, era isso que você procurava neste caso específico. E as versões recentes do Vim realmente permitem que você não defina esta opção,shiftwidth
então assumiria o valor definido portabstop
. Bastante útil (vejaajuda sobre largura de turno).
Exemplo
Por exemplo, se você usar as seguintes configurações:
set sts=4
set ts=2
set sw=8
Isso produziria o seguinte comportamento:
- Inserir uma tabulação no arquivo produziria um recuo de 4 espaços de largura.
- Como your
tabstop
está definido como 2, isso seria na verdade o equivalente a 2 tabulações. Isso é bastante fácil de verificar, basta usar as opçõeslist
elistchars
para exibir tabulações. - Se você recuar uma linha usando
>>
, o recuo terá 8 espaços de largura (portanto, o equivalente a 4 tabulações, com base notabstop
valor, igual ao acima).
Recomendações de recuo do Vim (da documentação do Vim)
Da tabstop
ajuda ( :help tabstop
no Vim):
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
(or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim
will use a mix of tabs and spaces, but typing <Tab> and <BS> will
behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
'expandtab'. This way you will always insert spaces. The
formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
|modeline| to set these values when editing the file again. Only
works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
'noexpandtab'. This should then work (for initial indents only)
for any tabstop setting that people use. It might be nice to have
tabs after the first non-blank inserted as spaces if you do this
though. Otherwise aligned comments will be wrong when 'tabstop' is
changed.
Eu pessoalmente uso principalmente a segunda solução, com tabulações de 2 espaços de largura.
set ts=2
set sts=2
set et "expand tabs to spaces
Responder3
De acordo comhttp://vim.wikia.com/wiki/Indenting_source_code, o comando 'filetype plugin indent on' fará com que o programa use scripts de recuo específicos do tipo de arquivo localizados no subdiretório de recuo da instalação do Vim. Essa página também afirma que 'cindent' é usado automaticamente em arquivos C e C++ e que você não deve ser obrigado a usar esse comando manualmente.
Não estou muito familiarizado com o Vim, pois só o uso para algumas edições básicas de texto ocasionais, mas tentaria emitir manualmente o comando 'cindent' para usar o tamanho de recuo automático padrão do Vim para esse código. Se isso não funcionar, você pode tentar 'recuo do plugin de tipo de arquivo ativado' e editar os scripts você mesmo para obter os recuos desejados.