Configurando as preferências de espaço em branco do Vim por tipo de arquivo

155

No meu trabalho, sou obrigado a seguir o estilo da casa para o recuo, que é o seguinte:

  • 2 espaços ao codificar html e ruby
  • guias ao codificar javascript, com tabwidth = 4 recomendado

Qual é a melhor maneira de especificar diferentes preferências de espaço em branco por tipo de arquivo?

nelstrom
fonte
possível duplicata de Mudar o comportamento recuo Vim por tipo de arquivo
acgtyrant
Todas essas respostas me deixaram mais confusa. O problema é que as opções são de preferência. A resposta aceita tem uma boa sintaxe. Este foi um excelente guia: vimcasts.org/transcripts/2/en
Mikael Lindlöf 02/02

Respostas:

245

existem muitas maneiras, mas aqui está uma maneira simples e fácil de entender. adicione estas linhas ao seu ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
Peter
fonte
27
ts = 'número de espaços que <Tab> no arquivo usa' sts = 'número de espaços que <Tab> usa durante a edição' sw = 'número de espaços a serem usados ​​na etapa de recuo (automático)' 'para obter detalhes, consulte: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs
Eu precisava anexar o expandtab pelo menos para o ruby, veja a resposta por 'muito php' aqui #
Michael Durrant
87

A resposta de Peter é bastante direta, mas infelizmente as opções não estão certas. Você precisa usar as seguintes opções:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Observe também:

  • Você pode fazer o vim mostrar caracteres de tabulação usando :set list.
  • Depois de definir as opções de tabulação / espaço corretamente, você pode fazer com que o vim repare o arquivo (substitua espaços por tabulações ou vice-versa) usando o :retab!comando
muito php
fonte
2
Qual é o benefício de expandtabmaissts=2
James McMahon
12
@JamesMcMahon expandtab expande todas as guias para espaços. sts (softtabstop) insere espaços e guias para recuos: quantas guias caberem no recuo com base no tamanho do tabstop e depois espaços depois disso. Obviamente, se a guia de expansão estiver ativada, todas as guias inseridas serão convertidas em espaços. stackoverflow.com/questions/1562336/… pode ajudar ainda mais. Sem a guia Expandir, a resposta de Peter inseria guias com 2 caracteres de largura, não espaços.
precisa saber é o seguinte
35

+1 na resposta de Peter, mas o Vim também fornece outra solução. Se você quiser fazer algo mais complicado do que um único setlocal, como configurar várias opções, comandos e mapeamentos de uma só vez, o recurso de plug-in de tipo de arquivo do vim será útil.

Você precisa ter filetype plugin onou filetype plugin indent onno seu .vimrce, em seguida, criar um plugin para, por exemplo, ruby ​​que você pode criar ~/.vim/ftplugin/ruby.vim. Tecnicamente, você pode usar todos os comandos que você gosta aqui, para ser executado quando um arquivo Ruby está carregado, mas as recomendadas incluem setlocal, map <buffer>, command -buffer, e que definem funções. Muitas informações estão no Guia do Usuário; se você estiver familiarizado com o script vim, vá para :help 41.11, caso contrário, leia :help usr_40e :help usr_41.

hobbs
fonte
10

Há também um bom script do vim: DetectIndent, que tenta detectar o recuo de um arquivo que você abre. É muito útil se você trabalha com muitos arquivos com diferentes estilos de codificação.

Eu uso um comando automático no meu .vimrc :

:autocmd BufReadPost * :DetectIndent 
Benedikt Waldvogel
fonte
0

Para inserir caracteres de espaço sempre que a tecla Tab for pressionada, defina a opção 'expandtab':

:set expandtab

O próximo passo é controlar o número de caracteres de espaço que serão inseridos quando a tecla Tab for pressionada, defina a opção 'tabstop'. Por exemplo, para inserir 2 espaços para uma guia, use:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

bartoindahouse
fonte