¿Eliminar la "pestaña" expandida en el espacio en Vim con una pulsación de tecla?

19

Edito el código de Python con Vim.

Con la tabclave obtengo cuatro espacios insertados para la sangría. ¿Cómo puedo eliminar esos espacios con un trazo "Retroceso" (?) En lugar de cuatro?

Tiene que haber alguna opción "establecida" para eso ...

Aquí está mi .vimrc:

set autoindent
set ts=4
set sw=4
set et
Evgeny
fuente

Respuestas:

23

Puede usar Ctrl+Dpara hacer una copia de seguridad de una tabulación. Esto realmente mueve toda la línea a la izquierda una tabulación; Ctrl+Thace lo mismo a la derecha. Tenga en cuenta que estas teclas solo funcionan en modo Insertar (use <<y >>para el equivalente en modo Comando).

Greg Hewgill
fuente
30
set softtabstop=4
sf17k
fuente
10
OMI, esto es exactamente lo que pidió el OP. Merece más votos a favor.
Ludwig Weinzierl
2
Esta es la respuesta correcta.
mk12
1
No sabía sobre esto, y esto era exactamente lo que estaba buscando. +1
NigoroJr
5

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

forma corta: set ts=4 sts=-1 sw=0 et

Explicación

Si establece softtabstop(o sts) -1, se comportará automáticamente igual que tabstop( ts), lo que le ahorrará problemas si cambia mucho las pestañas. El ajuste shiftwidth( sw) a 0debería hacer que sea igual de efectivo tabstop.

En detalle

shiftwidth sw

Número de espacios a utilizar para cada paso de la sangría (automática). Se utiliza para cindent, >>, <<, etc.
Cuando el cero tabstopse utilizará el valor.

tabstop ts

Número de espacios que cuenta en un archivo. Ver también : comando retab y softtabstopopción.

softtabstop sts

Número de espacios que Tabcuenta para realizar operaciones de edición, como insertar Tabo usar BS. Se siente como Tabs se insertan, mientras que en realidad se utiliza una mezcla de espacios y s. Esto es útil para mantener la tabsconfiguración está en su valor estándar, mientras se puede editar como está configurado sts. Cuando stses negativo, shiftwidthse usa el valor de . Esto le ahorrará problemas si cambia mucho las pestañas. Cuando expandtabno se establece, la cantidad de espacios se minimiza utilizando Tabs.

expandtab et

En modo Insertar: use el número apropiado de espacios para insertar a. Los espacios se utilizan en los guiones con el >y <órdenes y cuando autoindentestá encendido. Para insertar una pestaña real cuando expandtabestá activado, use Ctrl- V Tab. Ver también : retab

Orwellophile
fuente
Genial, he estado usando vim durante años, pero la herencia de sts / sw / ts nunca me llamó la atención.
timss
2

Escribí GreedyBackspace.vim para alguien que quería algo como esto. No lo uso personalmente, así que ha pasado un tiempo desde que lo actualicé. Sin embargo, no he recibido ningún informe de errores últimamente.

Heptita
fuente
1

Varias opciones:

  1. Puede 'volver a capturar' todos los espacios en blanco para que se reemplacen con pestañas. De esa manera, podrían eliminarse fácilmente.
  2. Podrías (esto no se ha probado, así que solo estoy proponiendo ideas aquí) hacer una función que 'ejecute en modo normal 4 veces la tecla de retroceso. Luego mapearlo a algo. Sin embargo, no tiene forma de saber si eliminará espacios o algunos caracteres importantes, por lo que esto es potencialmente inseguro.
  3. '4X' eliminará los últimos 4 caracteres (eso es X grande, no pequeño, uno pequeño actuará como la tecla Supr '.
Torre
fuente
0

la forma más fácil es <<, repita con un.

vimmer
fuente
Hola y bienvenidos al superusuario. Aunque estoy de acuerdo con que tu respuesta sea un usuario vi. Su respuesta es breve, no explica por qué sugiere lo que sugiere y por qué no sugiere algo que se ajuste a la pregunta formulada.
Mogget
-1

¿Ha verificado con la configuración de expandir pestañas en su VIM?

:set noet

Por lo general, prefiero mantener las pestañas activas mientras trabajo en los archivos.
Cuando es necesario, reemplazo las pestañas a 4 espacios o tantos como sea necesario.

:%s/<ctrl+V><tab>/    /g
                  ----

Como una pequeña ventaja, su archivo fuente es más corto en 3 caracteres por pestaña :-)

nik
fuente
oh, tengo et porque tengo que expandir las pestañas, creo, porque el código que edité se escribió inicialmente de esa manera. ahora solo estoy siguiendo esa convención.
Evgeny el
Aún se podía hacer lo que digo y restaurar espacios al final (cuando se tiene que dar a la parte posterior archivo en el repositorio)
nik
¿Quizás podría tener una función vim que los expandió a pestañas al abrir y los contrajo a espacios al cerrar? ¿Alguien tiene alguna idea?
sixtyfootersdude
Esta es una respuesta realmente inútil: reabre innecesariamente el debate pestañas contra espacios, sin proporcionar realmente ninguna información útil.
Dietrich Epp
-2

No creo que haya una manera. Una vez que la tecla tab se expande a cuatro espacios, vim no tiene forma de saber que alguna vez fueron una pestaña.

David Mackintosh
fuente
44
-1: Falta de imaginación.
sixtyfootersdude