Como posso alterar o recuo padrão com base no tipo de arquivo?

34

Eu gostaria de ter recuos diferentes com base no tipo de arquivo no qual estou trabalhando. Por exemplo, trabalhando em um .carquivo, eu gostaria que meu recuo tivesse 4 espaços. Nos .htmlarquivos, eu gostaria de trabalhar com guias.

Como faço para conseguir isso?

DeltaLima
fonte

Respostas:

25

O melhor método é colocar essas configurações ~/.vim/after/ftplugin/<filetype>.vim.

Para HTML (supondo que você queira quatro guias com caracteres amplos):

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

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

O uso de um ftplugin é preferível ao uso de comandos automáticos, porque o Vim já faz verificações de tipo de arquivo por si só e já tenta obter o ftplugin adequado para que não haja motivo para forçar ainda mais verificações e reimplementar a roda.

- editar -

Supondo que você tenha filetype plugin onno seu vimrc- o que você deve - o Vim tentará detectar o tipo de arquivo dos arquivos que você editar e, uma vez que o tipo de arquivo correto seja encontrado e definido para o buffer, tente obter o plug-in correspondente nos locais padrão:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

Tudo isso acontece automaticamente , portanto, se o seu tipo de arquivo for reconhecido pelo Vim, não há absolutamente nenhuma razão para adicionar qualquer lógica de detecção de tipo de arquivo: basta adicionar suas configurações ao plug-in correto e você estará bem.

romainl
fonte
Preciso ativar o plug-in de alguma forma ou a criação do (s) arquivo (s) será ativada automaticamente?
DeltaLima 03/02
Verifique se você tem filetype plugin indent onno seu vimrc.
Romainl
11
O @DeltaLima vim possui um caminho que percorre para verificar as configurações. Enquanto filetype plugin onestiver definido, o caminho do vim inclui os arquivos ftplugin/<filetype>.vime after/ftplugin/<filetype>/vimem seu caminho.
Davidlowryduda 03/02
@ DeltaLima, veja minha edição.
Romainl
14

Você pode fazer isso com comandos automáticos no seu .vimrc.

Por exemplo, eu tenho uma função html_like_modeque configura várias coisas para editar arquivos HTML. Na minha .vimrc, eu tenho:

au BufNewFile,BufRead *.html call s:html_like_mode()

Isso interrompe a extensão do arquivo. Você também pode desativar o tipo de arquivo, se tiver ativado:

au FileType perl setlocal equalprg=perltidy

Como você pode ver, você pode fazer qualquer comando lá. Então você pode facilmente fazer um setlocal shiftwidth 4para seus arquivos * .c.

derobert
fonte
9

augrouppermite agrupar comandos automáticos relacionados em grupos nomeados. (Veja aqui para aprender sobre os grupos de comandos automáticos.) Usamos augroups para adicionar comandos automáticos de ~/.vimrcuma maneira que não adicione duplicados toda vez que os originamos.

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
shawndumas
fonte
2
Seria útil se você poderia explicar o que este faz e como configurá-lo, nem todo mundo vai saber;)
Seth
3

Autocmd e FileType usados

autocmd FileType html setlocal shiftwidth=4 tabstop=4
avelino
fonte