Redefinir guia como 4 espaços

1094

Minha configuração atual assume 8 espaços; como eu poderia redefinir isso?

Ricky
fonte
4
Melhor ainda, configure-o para quatro espaços e permitir auto-indent ao mesmo tempo: Auto-indent com o conjunto TabWidth para 4 vagas
solid_liq
7
@ heinrich5991 Não entendi. Não preciso de 8 espaços para perceber que uma linha é recuada e, mais do que o necessário, significa limitar os caracteres que você pode exibir em uma longa linha de texto (pelo menos antes de quebrar). Mas cada um na sua. :)
weberc2
40
@ heinrich5991 Meu argumento é "use o mínimo possível para identificar rapidamente uma linha recuada". Pela minha opinião, a capacidade de identificar facilmente um recuo diminui rapidamente em <3 espaços e para de aumentar em 4 espaços. Portanto, recuo que excede 4 espaços é um desperdício, na minha experiência.
precisa saber é o seguinte
7
@ weberc2 Não poderia estar mais de acordo, companheiro. É por isso que me sinto tão malditamente claustrofóbico lendo Ruby ou "JavaScript moderno", cada um dos quais usando 2 espaços para indentação. Ele legitimamente me dá cansaço ao tentar seguir estruturas fortemente aninhadas. Guias difíceis para a vitória maldita.
Possível duplicado de substituir Tab com espaços em VIM
rofrol

Respostas:

1616

Isso depende do que você quer dizer. Deseja que os caracteres de tabulação reais em seu arquivo apareçam com 4 espaços de largura, ou por "tab" você quer dizer um recuo , gerado pressionando a tecla tab, o que resultaria no arquivo literalmente contendo (até) 4 caracteres de espaço para cada "guia" que você digita?

Dependendo da sua resposta, um dos seguintes conjuntos de configurações deve funcionar para você:

  • Para caracteres de tabulação que aparecem com quatro espaços :

    set tabstop=4
    

    Se você estiver usando o caractere de tabulação real no seu código-fonte, provavelmente também desejará essas configurações (na verdade, esses são os padrões, mas convém defini-los defensivamente):

    set softtabstop=0 noexpandtab
    

    Por fim, se você deseja que um recuo corresponda a uma única guia, você também deve usar:

    set shiftwidth=4
    
  • Para recuos que consistem em 4 caracteres de espaço, mas são inseridos com a tecla Tab:

    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
    

Para tornar as configurações acima permanentes, adicione essas linhas ao seu vimrc .

Caso você precise fazer ajustes ou simplesmente queira entender o que essas opções significam, veja a seguir o que cada opção significa:

tabstop

A largura de um batente rígido medido em "espaços" - efetivamente a largura (máxima) de um caractere de tabulação real.

shiftwidth

O tamanho de um "recuo". Também é medido em espaços, portanto, se sua base de código recuar com caracteres de tabulação, você deseja shiftwidthigualar o número de caracteres de tabulação vezes tabstop. Isso também é usado por coisas como o =, >e <comandos.

softtabstop

Definir isso para um valor diferente de zero, que tabstopfará com que a tecla tab (no modo de inserção) insira uma combinação de espaços (e possivelmente tabs) para simular paradas de tabulação nessa largura.

expandtab

Ativar isso fará com que a tecla tab (no modo de inserção) insira espaços em vez de caracteres de tabulação. Isso também afeta o comportamento do retabcomando.

smarttab

A ativação dessa opção fará com que a tecla tab (no modo de inserção) insira espaços ou tabulações para ir para o próximo travessão da próxima tabstop quando o cursor estiver no início de uma linha (ou seja, os únicos caracteres anteriores são espaços em branco).

Para mais detalhes sobre qualquer um deles, veja no vim (por exemplo ):help 'optionname':help 'tabstop'

Laurence Gonsalves
fonte
18
Também é importante garantir que os Makefiles sempre usem caracteres de tabulação rígidos, caso contrário as compilações falharão! Eu mostrei como, em stackoverflow.com/questions/234564/…
Shervin Emami
29
@ Indefinidas Essas são as configurações do sistema vim. ~/.vimrcsão as configurações do vim do usuário. A maioria das pessoas deixa as configurações do sistema em paz e apenas edita as configurações do usuário. Observe que ~/.vimrcnão existirá até que você o crie na maioria dos sistemas.
Laurence Gonsalves
4
Os usuários do Vim anotam o set softtabstop=4recurso! Estou cansado de tentar ler seu código com less, ou qualquer outro editor vim, exceto , apenas para ver recuos malucos porque você redefiniu a guia para ser um número arbitrário de espaços (mesmo que o resto do sistema pense de outra forma)! :-)
Ogre Psalm33
6
Alguém pode me ajudar a entender por que essa resposta diz para usar tabstop=8travessões que consistem em 4 espaços? Não consegui entender o motivo depois de ler as descrições das várias configurações. Outra resposta diz para usar, o tabstop=4que faz um pouco mais de sentido para mim.
Kodo Johnson
5
@KodosJohnson A tabstopopção controla a largura de um caractere de tabulação rígido. Se você deseja que seus recuos sejam compostos por 4 caracteres de espaço, em vez de caracteres de tabulação únicos com 4 larguras, a largura do caractere de tabulação não importa - mais ou menos . Na prática, você provavelmente deseja que a largura dos caracteres da tabulação seja diferente da largura dos seus recuos, para reduzir a chance de os caracteres da tabulação se disfarçarem como recuos apropriados. ( list+ também expandtabpode ajudar aqui) Além disso, as guias com 8 caracteres de largura são "o padrão" - seu terminal, Python e muitas outras ferramentas são padronizadas como as guias de 8 caracteres de largura.
Laurence Gonsalves
746

Para definir isso permanentemente para o usuário atual, crie (ou edite) o .vimrcarquivo:

$ vim ~/.vimrc

Em seguida, cole a configuração abaixo no arquivo. Depois que o vim for reiniciado, as configurações da guia serão aplicadas.

set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.

set shiftwidth=4    " Indents will have a width of 4

set softtabstop=4   " Sets the number of columns for a TAB

set expandtab       " Expand TABs to spaces
Alan Haggai Alavi
fonte
Se você não possui ~ / .vimrc, tente com / etc / vim / vimrc. No meu caso no Ubuntu 16.04, o arquivo de configuração está lá. Mas lembre-se de que alterar esse arquivo fará com que a configuração seja usada globalmente.
Todor Todorov
5
Mais uma coisa, use :retabpara converter existente tabpara spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong
57

ou abreviação de vim modeline:

vim :set ts=4 sw=4 sts=4 et :
zen
fonte
28

Existem poucas configurações que definem o uso de espaços ou tabulações.

Então, aqui estão funções úteis que podem ser definidas no seu ~/.vimrcarquivo:

function! UseTabs()
  set tabstop=4     " Size of a hard tabstop (ts).
  set shiftwidth=4  " Size of an indentation (sw).
  set noexpandtab   " Always uses tabs instead of space characters (noet).
  set autoindent    " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2     " Size of a hard tabstop (ts).
  set shiftwidth=2  " Size of an indentation (sw).
  set expandtab     " Always uses spaces instead of tab characters (et).
  set softtabstop=0 " Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent    " Copy indent from current line when starting a new line.
  set smarttab      " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

Uso:

:call UseTabs()
:call UseSpaces()

Para usá-lo por extensões de arquivo, a seguinte sintaxe pode ser usada (adicionada a .vimrc):

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

Consulte também: Convertendo guias em espaços .


Aqui está outro trecho da Wikia que pode ser usado para alternar entre guias e espaços :

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set expandtab
" allow toggling between local and default mode
function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

Ele permite usar 4 espaços para cada guia e um mapeamento F9para alternar as configurações.

kenorb
fonte
27

Copiei e colei isso no meu arquivo .vimrc:

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4

As 2 primeiras configurações significam que, quando pressiono Tab, recebo 4 espaços. A terceira configuração significa que, quando eu faço V>(visual e recuo), também recebo 4 espaços.

Não é tão abrangente quanto a resposta aceita, mas pode ajudar pessoas que querem apenas algo para copiar e colar.

Snowcrash
fonte
14

Coloque as configurações desejadas no arquivo ~ / .vimrc - Veja abaixo algumas diretrizes e práticas recomendadas.

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 aparece a cada 4 (ou 3) caracteres.

    Nota: Definir 'tabstop' com qualquer outro valor que 8 pode fazer com que seu arquivo pareça errado em muitos lugares (por exemplo, ao imprimi-lo).

  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.

Fonte:

ElasticThoughts
fonte
+1 para explicar por que definir tabstop! = 8 pode ser ruim!
Ogre Psalm33
3
Isso é ótimo, mas você deve observar que isso é literalmente de vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'ou :help tabstopno vim.
Belacqua
6

Adicionar linha
set ts=4
no
~/.vimrcarquivo por usuário
ou
/etc/vimrcarquivo para todo o sistema

Alok Singh Mahor
fonte
2

Meu básico ~ / .vimrc com comentário:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 
o0omycomputero0o
fonte
0

Permanente para todos os usuários (quando você estiver sozinho no servidor):

# echo "set tabstop=4" >> /etc/vim/vimrc

Normalmente no novo servidor apt-get purge nano mce em todos os outros para economizar seu tempo. Caso contrário, você redefinirá o editor em git, crontabetc

Vasilii Suricov
fonte
1
Se você definir EDITOR, a maioria dos programas o respeitará.
D. Ben Knoble
@ D.BenKnoble você está certo. eu tentei. por enquanto prefiro economizar tempo e nervosismo. Não é possível verificar exatamente o que é executado F10, nanomas eu sempre faço alguns truques com o save (talvez F10seja uma solução). ou não funciona screen? Não me lembro, apenas odeio)
Vasilii Suricov
de qualquer maneira, no passado ...
Vasilii Suricov 01/03