it-swarm-es.tech

Pestañas y espacios en vim

¿Cómo evito que vim reemplace los espacios con pestañas cuando el autoindent está activado?

Un ejemplo: si tengo dos pestañas y 7 espacios al principio de la línea, y tabstop=3, y presiono Intro, la siguiente línea tiene cuatro pestañas y 1 espacio al principio, pero no quiero que ...

69
RQ

Tal vez sea una buena idea no usar pestañas en absoluto.

:set expandtab

Si desea reemplazar todas las pestañas de su archivo por 3 espacios (que se verán bastante similares a tabstop=3):

:%s/^I/   /

(donde ^I es el TAB personaje)

Desde la VIM ayuda en línea:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be Nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.
77
user11211

Puede convertir todos los TAB a SPACE

:set et
:ret!

o convierte todos los SPACE a TAB

:set et!
:ret!
40
kev

todo lo que quiero es que la línea con sangría automática tenga exactamente los mismos caracteres de sangría que la línea anterior.

:help copyindent

'copyindent''ci'boolean (por defecto desactivado); local para amortiguar {no en Vi}

Copie la estructura de la sangría de las líneas existentes al autoindentar una nueva línea. Normalmente, la nueva sangría se reconstruye mediante una serie de pestañas seguidas de espacios según sea necesario (a menos que 'expandtab' esté habilitado, en cuyo caso solo se usan espacios). Al habilitar esta opción, la nueva línea copia todos los caracteres que se usaron para la sangría en la línea existente. Si la nueva sangría es mayor que en la línea existente, el espacio restante se rellena de la manera normal.

NOTA: 'copyindent' se restablece cuando 'compatible' se establece.
También vea 'preserveindent' .

:help preserveindent

'preserveindent''pi'boolean (por defecto desactivado); local para amortiguar {no en Vi}

Al cambiar la sangría de la línea actual, conserve la mayor cantidad posible de la estructura de sangría. Normalmente, la sangría se reemplaza por una serie de pestañas seguidas de espacios según sea necesario (a menos que 'expandtab' esté habilitado, en cuyo caso solo se usan espacios). Habilitar esta opción significa que la sangría conservará tantos caracteres existentes como sea posible para la sangría, y solo agregará tabulaciones o espacios adicionales según sea necesario.

NOTA: Cuando se usa ">>" varias veces, la sangría resultante es una mezcla de tabulaciones y espacios. Puede que no te guste esto.
NOTA: 'preserveindent' se reinicia cuando 'compatible' se establece.
Ver también 'copyindent' .
Uso: reabastecer para limpiar espacios en blanco.

40
Aristotle Pagaltzis

Aquí hay parte de mi .vimrc:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Esto funciona bien para mí porque absolutamente no quiero pestañas en mi código fuente. Por su pregunta, parece que desea mantener dos pestañas y siete espacios en la siguiente línea, y no estoy seguro de que haya una manera de enseñar a vim a adaptarse a ese estilo.

25
Greg Hewgill

Tal vez el fondo de esto puede ayudarte?

Standard vi interpreta la tecla de tabulación literalmente, pero existen alternativas populares derivadas de vi que son más inteligentes, como vim. Para hacer que vim interprete la pestaña como un comando `` sangrar '' en lugar de un comando insert-a-tab, haz esto:

set softtabstop=2
1
svrist

Si desea reemplazar todas las pestañas con espacios basados ​​en la configuración de 'ts', puede usar: retab. También puede hacer lo contrario.

1
graywh