Espaços de recuo automático com C no vim?

85

Fiquei um pouco estragado usando Eclipse e java. Comecei a usar o vim para fazer a codificação C em um ambiente Linux. Existe uma maneira de fazer com que o vim faça automaticamente o espaçamento adequado para os blocos?

Então, depois de digitar um {a próxima linha terá 2 espaços recuados, e um retorno nessa linha irá mantê-la no mesmo recuo, e a} vai voltar 2 espaços?

zxcv
fonte

Respostas:

135

Esses dois comandos devem fazer isso:

Para obter pontos de bônus, coloque-os em um arquivo chamado .vimrc localizado no diretório inicial do Linux

davr
fonte
12
Eu também recomendaria colocá-los em ~ .vim / ftplugin / c.vim para que você não use cindent o tempo todo, mas apenas para arquivos C / C ++.
graywh
@graywh: E para pl, php, cpp, as, java e todos os outros arquivos que eu quero que tenham o mesmo recuo? Eu preciso criar um arquivo de configurações separado para cada um?
dia
17
Eu confio nos scripts de indentação agrupados do Vim (: filetype indent on), que é muito melhor do que apenas usar 'cindent' sempre.
graywh
3
por que o recuo do tipo de arquivo é melhor do que usar cindent é bem explicado aqui: vim.wikia.com/wiki/…
Jayen
1
Para indentação automática, você pode usar a abreviação: definir ai
Iam Zesh
56

Eu escrevi tudo sobre guias no vim , o que mostra algumas coisas interessantes sobre as quais você não perguntou. Para recuar os colchetes automaticamente, use:

Para recuar dois espaços (em vez de uma tabulação de oito espaços, o padrão do vim):

Para evitar que o vim converta oito espaços em guias:

Se você quiser alterar o recuo de um bloco de texto, use <e>. Eu geralmente uso isso em conjunto com o modo de seleção de bloco (v, selecione um bloco de texto, <ou>).

(Eu tentaria dissuadi-lo de usar recuo de dois espaços, já que eu (e a maioria das outras pessoas) acho difícil de ler, mas isso é outra discussão.)

Comodoro Jaeger
fonte
Blog muito bom. Ainda sou bastante novo no vim, mas é bom saber que existem bons recursos por aí.
zxcv
3
Você também perdeu a alteração do softtabstop além da largura de deslocamento.
graywh
8

Muitos recursos do vim (como autoindente cindent) são desativados por padrão. Para realmente ver o que o vim pode fazer por você, você precisa de um decente ~/.vimrc.

Um bom começo está dentro $VIMRUNTIME/vimrc_example.vim. Se você quiser experimentar, use

quando em vim.

Na verdade, eu sugiro apenas copiar o conteúdo para o seu ~/.vimrccomo está bem comentado, e um bom lugar para começar a aprender como usar o vim. Você pode fazer isso por

Isso substituirá seu atual ~/.vimrc, mas se tudo o que você tiver lá forem as configurações de recuo que Davr sugeriu, eu não me importaria, pois o vimrc de exemplo cuidará disso para você também. Para uma explicação completa do exemplo e o que ele faz por você, veja :help vimrc-intro.

rampion
fonte
6

Basta executar:

JamesM-SiteGen
fonte
1
Não fui eu quem votou contra, mas provavelmente foi porque simplesmente "definir autoindent" não faz seu próprio recuo automático ao digitar "{" e "}", e também não define automaticamente o espaçamento para 2 espaços. Isso é o que eles pediram.
Victor Zamanian
3

Acho que a melhor resposta é realmente explicada no vim wikia:

http://vim.wikia.com/wiki/Indenting_source_code

Observe que desaconselha o uso de "definir indentação automática". A melhor característica de todas que encontrei nesta explicação é ser capaz de definir configurações por arquivo, o que é especialmente útil se você programar em python e C ++, por exemplo, já que você gostaria de 4 espaços para guias no anterior e 2 para espaços no último.

user809472
fonte
0

e lembre-se sempre desta venerável explicação de Spaces + Tabs:

http://www.jwz.org/doc/tabs-vs-spaces.html

mike511
fonte
2
O que há com o argumento daquele cara? Não entendo como não usar o caractere TAB e preencher com espaços embutidos em código resolve os problemas de todos. Isso impossibilitaria, por exemplo, ser capaz de abrir um arquivo e ter a largura de seus recuos aparecendo de acordo com suas preferências.
thomasrutter
1
A solução desse cara é muito melhor :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter
-1

Experimentar:

definir sw = 2

definir ts = 2

definir smartindent

Craig B.
fonte
De acordo com a ajuda, cindent é melhor do que smartindent, mas só funciona para código C-like.
thomasrutter
smartindent está obsoleto (era apenas para código semelhante ao C também). Os scripts de indentação de tipo de arquivo são muito melhores.
graywh
@graywh além do wiki, qual fonte oficial declara o status obsoleto de smartindent?
memeplex