Como altero o tamanho da guia no Vim?

172

Toda vez que adiciono um seletor no CSS e pressiono Enterpara definir as propriedades, ele termina assim:

#selector {
        property: value;
}

(Guias de 8 espaços)

Como posso configurar o Vim para torná-lo assim:

#selector {
    property: value;
}

(Separadores com 4 espaços)

alexchenco
fonte
4
Deseja uma guia com 4 espaços de largura? Quatro espaços? Ou quatro guias com 1 largura de espaço? São coisas diferentes, e você não é claro. Em qualquer caso, começar com a leitura: ele ts,: ele SW, e: ele expandt
abeyer

Respostas:

102

Expandindo a resposta de zoul:

Se você deseja configurar o Vim para usar configurações específicas ao editar um tipo de arquivo específico, use comandos automáticos:

autocmd Filetype css setlocal tabstop=4

Isso fará com que as guias sejam exibidas como 4 espaços. A configuração expandtabfará com que o Vim realmente insira espaços (o número deles sendo controlado por tabstop) quando você pressionar tab; convém usar softtabstoppara que o backspace funcione corretamente (ou seja, reduza a indentação quando isso acontecer, caso as guias sejam usadas, em vez de sempre excluir um caracter por vez).

Para tomar uma decisão totalmente instruídos sobre a forma de definir as coisas, você precisa ler docs Vim em tabstop, shiftwidth, softtabstope expandtab. O bit mais interessante é encontrado em expandtab( :help 'expandtab):

Existem quatro maneiras principais de usar guias no Vim:

  1. Sempre mantenha 'tabstop' em 8, defina 'softtabstop' e 'shiftwidth' para 4 (ou 3 ou o que você preferir) e use 'noexpandtab'. Em seguida, o Vim usará uma mistura de guias e espaços, mas digitando e se comportará como uma guia que aparece a cada 4 (ou 3) caracteres.

  2. Defina 'tabstop' e 'shiftwidth' como desejar e use 'expandtab'. Dessa forma, você sempre inserirá espaços. A formatação nunca será alterada quando 'tabstop' for alterado.

  3. Defina 'tabstop' e 'shiftwidth' como você preferir e use uma | modeline | para definir esses valores ao editar o arquivo novamente. Funciona apenas ao usar o Vim para editar o arquivo.

  4. Sempre defina 'tabstop' e 'shiftwidth' com o mesmo valor e 'noexpandtab'. Isso deve funcionar (apenas para recuos iniciais) em qualquer configuração de tabstop usada pelas pessoas. Pode ser bom ter guias após o primeiro não espaço em branco inserido como espaços, se você fizer isso. Caso contrário, os comentários alinhados ficarão errados quando 'tabstop' for alterado.

Michał Marczyk
fonte
Além disso, não se preocupe muito em mudar de idéia mais tarde ... veja :help retab(verifique a variante!).
Michał Marczyk
O uso do autocmd é complementar ao uso de .vimrc ou uma alternativa?
Josh Desmond
224
:set tabstop=4
:set shiftwidth=4
:set expandtab

Isso irá inserir quatro espaços em vez de um caractere de tabulação. Os espaços são um pouco mais "estáveis", o que significa que o texto recuado com espaços aparecerá da mesma forma no navegador e em qualquer outro aplicativo.

zoul
fonte
83
Sim, mas as guias são semânticas (cada guia significa 1 camada de recuo), enquanto os espaços são puramente de apresentação. Ou, em outras palavras, o uso de guias permitirá que outras pessoas que visualizam seu código sejam exibidas da maneira que elas se sentirem confortáveis, enquanto os espaços não permitiriam isso.
K Primeiro-
11
Note que se você preferir '>' e '<' para mover seu texto a mesma distância que a tecla tab , você pode simplesmente :set shiftwidth=0no vimrc e esquecê-lo para sempre, porque isso indica ao vim que você sempre deseja que ele corresponda tabstop.
precisa saber é o seguinte
132

Para fazer a alteração em uma sessão, use este comando:

:set tabstop=4

Para tornar a alteração permanente, adicione-a ~/.vimrcou ~/.vim/vimrc:

set tabstop=4

Isso afetará todos os arquivos, não apenas o css. Para afetar apenas arquivos css:

autocmd Filetype css setlocal tabstop=4

como indicado na resposta de Michał .

Keith
fonte
2
se você deseja que a tab funcione como quatro espaços, é necessário adicionar as outras linhas da resposta @Zoul ao .vimrc também; ou seja, adicione 'set shiftwidth = 4' e 'set expandtab' ao .vimrc também.
Qartal
7
A pergunta é "Como altero o tamanho da guia no Vim?"
25417 Keith
É assim que eu faria. E para garantir que você ~/.vimrcsempre faça o backup, eu geralmente salve o arquivo na minha pasta do Dropbox e crie um link sym para a área de trabalho:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance em
41

Várias das respostas desta página são correções de 'uso único' para o problema descrito. Ou seja, na próxima vez que você abrir um documento com o vim, as configurações da guia anterior retornarão.

Se alguém estiver interessado em alterar permanentemente as configurações da guia:

Alexander McNulty
fonte
11
Isso insere espaços, não tabulações.
Supernovah
5
@Supernovah você pode remover o "expandtab", para obter guias
kommradHomer
28

Como uma linha no vim :

:set tabstop=4 shiftwidth=4 expandtab

Para instalação permanente , adicione estas linhas em ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
fonte
6

ATUALIZAR

Se você estiver trabalhando em um projeto específico, eu recomendo usar o editorconfig .

Permite definir um .editorconfigarquivo na raiz do seu repositório, definindo o recuo que você deseja usar para cada tipo de arquivo no seu repositório.

Por exemplo:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Existe um plug-in vim que configura automaticamente o vim de acordo com o arquivo de configuração do arquivo que você abre.

Além disso, o .editorconfigarquivo é suportado automaticamente em muitos outros IDEs e editores, portanto, é a melhor opção para colaborar entre usuários com ambientes diferentes.

RESPOSTA ORIGINAL

Se você precisar alterar os tamanhos com frequência e não desejar vincular isso a um tipo de arquivo específico, poderá ter comandos predefinidos no arquivo .vimrc para alternar rapidamente as preferências:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Isso mapeia dois conjuntos diferentes de tamanhos para as chaves \ te \ m. Você pode refazer isso com as chaves que desejar.

Jens
fonte