Pregunta

¿Cómo evito que vim reemplace espacios con pestañas cuando la sangría automática está activada?

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

¿Fue útil?

Solución

Quizás sea una buena idea no utilizar pestañas en absoluto.

:set expandtab

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

:%s/^I/   /

(dónde ^I es el PESTAÑA personaje)

Desde la ayuda en línea de VIM:

'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.

Otros consejos

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

'copiar sangría' 'ci' booleano (desactivado por defecto);local al buffer;{no en Vi}

Copie la estructura de las líneas existentes sangrando al autoindentando una nueva línea.Normalmente, el nuevo sangría se reconstruye por una serie de pestañas seguidas de espacios según sea necesario (a menos que 'expandir pestaña' está habilitado, en cuyo caso solo se utilizan espacios).Habilitar esta opción hace que la nueva línea copie cualquier personaje que se usara para sangrar en la línea existente.Si la nueva sangría es mayor que en la línea existente, el espacio restante se llena de manera normal.

NOTA: 'copiar sangría' se reinicia cuando 'compatible' Está establecido.
Ver también 'preservar sangría'.

:help preserveindent

'preservar sangría' 'Pi' booleano (desactivado por defecto);local al buffer;{no en Vi}

Cuando cambie la sangría de la línea actual, preserve la mayor cantidad posible de la estructura de sangría.Normalmente, el sangría se reemplaza por una serie de pestañas seguidas de espacios según sea necesario (a menos que 'expandir pestaña' está habilitado, en cuyo caso solo se utilizan espacios).Habilitar esta opción significa que el sangría preservará tantos caracteres existentes como sea posible para la sangría, y solo agregará pestañas o espacios adicionales según sea necesario.

NOTA:Cuando se usa ">>" varias veces, el sangría resultante es una mezcla de pestañas y espacios.Puede que esto no te guste.
NOTA: 'preservar sangría' se reinicia cuando 'compatible' Está establecido.
Ver también 'copiar sangría'.
Utilice :retab para limpiar espacios en blanco.

Puedes convertir todo TAB a SPACE

:set et
:ret!

o convertir todo SPACE a TAB

:set et!
:ret!

Aquí tenéis parte de mi .vimrc:

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

Esto funciona bien para mí porque no quiero pestañas en mi código fuente.Según 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ñarle a vim a adaptarse a ese estilo.

¿Quizás el fondo de esto pueda ayudarte?

El vi estándar interpreta la tecla de tabulación literalmente, pero existen alternativas populares derivadas de vi que son más inteligentes, como vim.Para que vim interprete la pestaña como un comando ``sangría'' en lugar de un comando de insertar una pestaña, haga esto:

set softtabstop=2

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top