Redefinir la pestaña como 4 espacios

1096

Mi configuración actual supone 8 espacios; ¿Cómo podría redefinirlo?

Ricky
fuente
44
Mejor aún, configúrelo
solid_liq
77
@ heinrich5991 No lo entiendo. No necesito 8 espacios para darme cuenta de que una línea está sangrada, y más de lo necesario significa limitar los caracteres que puede ver en una larga línea de texto (al menos antes de ajustar). Pero a cada cual lo suyo. :)
weberc2
40
@ heinrich5991 Mi argumento es "usar lo menos posible para identificar fácilmente una línea con sangría". Según mi estimación, la capacidad de identificar fácilmente una sangría disminuye rápidamente en <3 espacios, y deja de aumentar en 4 espacios. Por lo tanto, la sangría que excede los 4 espacios es un desperdicio, en mi experiencia.
weberc2
77
@ weberc2 No podría estar más de acuerdo, amigo. Es por eso que me siento tan claustrofóbico leyendo Ruby o "JavaScript moderno", cada uno de los cuales usa 2 espacios para la sangría. Me da fatiga visual legítimamente cuando intento seguir estructuras muy anidadas. Fichas duras para la maldita victoria.
Posible duplicado de Reemplazar pestaña con espacios en VIM
rofrol

Respuestas:

1618

Depende de lo que quieras decir. ¿Desea que los caracteres de tabulación reales en su archivo aparezcan 4 espacios de ancho, o por "tabulación" realmente quiere decir una sangría , generada al presionar la tecla de tabulación, lo que daría como resultado que el archivo contenga literalmente (hasta) 4 caracteres de espacio para cada "pestaña" que escribes?

Dependiendo de su respuesta, uno de los siguientes conjuntos de configuraciones debería funcionar para usted:

  • Para los caracteres de tabulación que aparecen en 4 espacios :

    set tabstop=4
    

    Si está usando el carácter de tabulación real en su código fuente, probablemente también desee estas configuraciones (estos son en realidad los valores predeterminados, pero es posible que desee establecerlos a la defensiva):

    set softtabstop=0 noexpandtab
    

    Finalmente, si desea que una sangría se corresponda con una sola pestaña, también debe usar:

    set shiftwidth=4
    
  • Para sangrías que constan de 4 caracteres de espacio pero se ingresan con la tecla de tabulación:

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

Para que la configuración anterior sea permanente, agregue estas líneas a su vimrc .

En caso de que necesite hacer ajustes, o simplemente le gustaría entender qué significan todas estas opciones, aquí hay un desglose de lo que significa cada opción:

tabstop

El ancho de un tabulador rígido medido en "espacios" - efectivamente el ancho (máximo) de un carácter de tabulación real.

shiftwidth

El tamaño de una "sangría". También se mide en espacios, por lo que si la base de su código sangra con caracteres de tabulación, entonces desea shiftwidthigualar el número de caracteres de tabulación por veces tabstop. Esto también es utilizado por cosas como el =, >y <los comandos.

softtabstop

Establecer esto en un valor distinto de cero tabstophará que la tecla de tabulación (en modo de inserción) inserte una combinación de espacios (y posiblemente tabulaciones) para simular tabulaciones en este ancho.

expandtab

Habilitar esto hará que la tecla de tabulación (en modo de inserción) inserte espacios en lugar de caracteres de tabulación. Esto también afecta el comportamiento del retabcomando.

smarttab

Habilitar esto hará que la tecla de tabulación (en modo de inserción) inserte espacios o pestañas para ir al siguiente guión de la siguiente tabulación cuando el cursor esté al comienzo de una línea (es decir, los únicos caracteres anteriores son espacios en blanco).

Para más detalles sobre cualquiera de estos ver en vim (por ejemplo ):help 'optionname':help 'tabstop'

Laurence Gonsalves
fuente
18
También es importante asegurarse de que los Makefiles siempre usen caracteres de tabulación dura, de lo contrario, las compilaciones fallarán. He mostrado cómo hacerlo, en stackoverflow.com/questions/234564/…
Shervin Emami
30
@ Indefinido Esa es la configuración del sistema vim. ~/.vimrces la configuración de vim del usuario. La mayoría de las personas dejan solo la configuración del sistema y solo editan la configuración del usuario. Tenga en cuenta que ~/.vimrcno existirá hasta que lo cree en la mayoría de los sistemas.
Laurence Gonsalves
44
¡Los usuarios de Vim toman nota de la set softtabstop=4función! Estoy cansado de tratar de leer su código con less, o cualquier otro editor vim, excepto para ver sangrías locas porque redefinió la pestaña para que sea un número arbitrario de espacios (¡aunque el resto del sistema piensa lo contrario!) :-)
Ogre Psalm33
66
¿Alguien puede ayudarme a entender por qué esta respuesta dice que se use tabstop=8para sangrías que consisten en 4 espacios? No pude entender el motivo después de leer las descripciones de las distintas configuraciones. Otra respuesta dice usar, lo tabstop=4que tiene un poco más de sentido para mí.
Kodos Johnson
55
@KodosJohnson La tabstopopción controla el ancho de un carácter de pestaña dura. Si desea que sus guiones a constan de 4 caracteres de espacio, en lugar de los caracteres de tabulación individuales que son 4-ancha, entonces el ancho de su carácter de tabulación no importa - tipo de . En la práctica, probablemente desee que el ancho de su carácter de tabulación sea diferente del ancho de sus sangrías, para reducir la posibilidad de que los caracteres de tabulación se disfracen como sangrías adecuadas. ( list+ también expandtabpuede ayudar aquí) Además, las pestañas de 8 caracteres de ancho son "el estándar": su terminal, Python y muchas otras herramientas están predeterminadas en pestañas de 8 caracteres de ancho.
Laurence Gonsalves
747

Para definir esto de forma permanente para el usuario actual, cree (o edite) el .vimrcarchivo:

$ vim ~/.vimrc

Luego, pegue la siguiente configuración en el archivo. Una vez que se reinicie vim, se aplicará la configuración de la pestaña.

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
fuente
Si no tiene ~ / .vimrc, intente con / etc / vim / vimrc. En mi caso en Ubuntu 16.04, el archivo de configuración está ahí. Pero tenga en cuenta que cambiar este archivo hará que la configuración se use globalmente.
Todor Todorov
55
Una cosa más, utilizar :retabpara convertir existente taba spaces. vim.wikia.com/wiki/Converting_tabs_to_spaces
DawnSong
57

o taquigrafía para vim modeline:

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

Hay pocas configuraciones que definen si se usan espacios o pestañas.

Aquí hay funciones útiles que se pueden definir en su ~/.vimrc archivo:

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 usarlo por extensiones de archivo, se puede usar la siguiente sintaxis (agregada a .vimrc ):

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

Ver también: Convertir pestañas en espacios .


Aquí hay otro fragmento de Wikia que se puede usar para alternar entre pestañas y espacios :

" 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

Permite usar 4 espacios para cada pestaña y un mapeo F9para alternar la configuración.

kenorb
fuente
27

Copié y pegué esto en mi archivo .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

Las 2 primeras configuraciones significan que cuando presiono Tab obtengo 4 espacios. La tercera configuración significa que cuando lo hagoV> (es decir, visual y sangría) también obtengo 4 espacios.

No es tan completo como la respuesta aceptada, pero podría ayudar a las personas que solo quieren algo para copiar y pegar.

Snowcrash
fuente
14

Ponga la configuración deseada en el archivo ~ / .vimrc : consulte a continuación algunas pautas y prácticas recomendadas.

Hay cuatro formas principales de usar pestañas en Vim:

  1. Mantenga siempre 'tabstop' en 8, establezca 'softtabstop' y 'shiftwidth' en 4 (o 3 o lo que prefiera) y use 'noexpandtab'. Luego, Vim usará una combinación de pestañas y espacios, pero al escribir y se comportará como si una pestaña apareciera cada 4 (o 3) caracteres.

    Nota: Configurar 'tabulación' en cualquier otro valor que no sea 8 puede hacer que su archivo parezca incorrecto en muchos lugares (por ejemplo, al imprimirlo).

  2. Establezca 'tabstop' y 'shiftwidth' a lo que prefiera y use 'expandtab'. De esta manera siempre insertarás espacios. El formato nunca se estropeará cuando se cambie 'tabstop'.

  3. Establezca 'tabstop' y 'shiftwidth' a lo que prefiera y use | modeline | para establecer estos valores al editar el archivo nuevamente. Solo funciona cuando se usa Vim para editar el archivo.

  4. Establezca siempre 'tabstop' y 'shiftwidth' en el mismo valor, y 'noexpandtab'. Esto debería funcionar (solo para las sangrías iniciales) para cualquier configuración de tabulación que las personas usen. Sin embargo, puede ser bueno tener pestañas después del primer espacio no vacío insertado como espacios si hace esto. De lo contrario, los comentarios alineados serán incorrectos cuando se cambie 'tabulación'.

Fuente:

Pensamientos elásticos
fuente
¡+1 para explicar por qué configurar tabstop! = 8 puede ser malo!
Ogre Psalm33
3
Esto es genial, pero debe tener en cuenta que se trata literalmente de vimdoc.sourceforge.net/htmldoc/options.html#'tabstop 'o :help tabstopen vim.
belacqua
6

Agregar línea
set ts=4
en el
~/.vimrcarchivo por usuario
o
/etc/vimrcarchivo para todo el sistema

Alok Singh Mahor
fuente
2

Mi ~ / .vimrc básico con comentario:

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
fuente
0

Permanente para todos los usuarios (cuando está solo en el servidor):

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

Normalmente en un nuevo servidor apt-get purge nano mcy todos los demás para ahorrar tiempo. De lo contrario, redefinirá el editor en git, crontabetc.

Vasilii Suricov
fuente
1
Si configura EDITOR, la mayoría de los programas lo respetarán.
D. Ben Knoble
@ D.BenKnoble tienes razón. He intentado. por ahora prefiero ahorrarme tiempo y nervios. no puede ver que corre exactamente con los F10de nanopero yo siempre hago algunos trucos con Save (tal vez F10es una solución). o no funciona screen? No puedo recordar, solo lo odio)
Vasilii Suricov
de todos modos en el pasado ...
Vasilii Suricov