vim: elimina los 2 primeros espacios para varias líneas

79

¿Cuál es la forma más fácil de eliminar los primeros 2 espacios de cada línea usando VIM? Básicamente, se repite "2x" para cada línea.

Aclaración: aquí se asume que los primeros 2 caracteres son espacios. Entonces, la pregunta es sobre cómo hacer sangrías para varias líneas juntas.

twimo
fuente
¿Es específicamente un espacio en blanco o los dos primeros caracteres independientemente de lo que sean?
Jason Down
Son los dos primeros personajes. Suponiendo que los dos primeros caracteres son espacios.
twimo
He mostrado una forma de hacerlo mediante la búsqueda y reemplazo en el modo ex editor. Una forma garantiza que solo lo hará para líneas que comiencen con dos espacios (y solo eliminará dos espacios). El otro solo destripa a los dos primeros personajes independientemente de lo que sean.
Jason Down
Las preguntas de Vim no están fuera de tema en SO (consulte las discusiones en meta y ... SO FAQ). Además, la sangría es relevante para el desarrollo ...
Luc Hermitte

Respuestas:

93

Algunas opciones más. Puede decidir cuál es la "forma más fácil".

Elimine los primeros 2 caracteres de cada línea:

:%normal 2x

Elimine los primeros 2 caracteres de cada línea, solo si son espacios:

:%s/^  /

Tenga en cuenta que la última barra es opcional y solo está aquí para que pueda ver los dos espacios. Sin la barra, solo tiene 7 caracteres, incluido el :.

Mueva la sangría a la izquierda para cada línea:

:%normal <<
Bhinesley
fuente
11
Me encanta que haya 30 formas diferentes de hacer algo en Vim. Preguntas como estas traen a colación cosas que nunca conocías. No tenía idea del% normal.
Jason Down
Gracias por la aclaración del último guión. Eso es útil.
ryanjdillon
1
Agregaré que el %signo simplemente significa "ejecutar este comando para cada línea del documento, no solo para la línea actual". Yo creo que. No puedo encontrar mucha documentación al respecto.
Sammaron
119
  1. Ingrese al modo de bloque visual con Ctrl-V(o Ctrl-Qsi lo usa Ctrl-Vpara pegar);
  2. Seleccione el área a eliminar con las flechas;
  3. Luego presione dpara borrar el área seleccionada.
  4. prensa Esc
Tom Kerr
fuente
7
ctrl-v para seleccionar qué caracteres eliminar y luego d para el corte.
Henrik K
2
¡Respuesta destacada! :-)
Nikos Alexandris
Esto no funciona en todos los vim que uso, pero para los que sí funciona es muy conveniente y es bueno poder visualizar el área que está eliminando antes de hacerlo.
seekchengine27
¿Quizás un enlace predeterminado diferente para el modo de bloque visual? Tal vez una diferencia entre la distribución VI de Unix más antigua (a diferencia de VIM).
Tom Kerr
Esta es probablemente la respuesta más sencilla y sensata.
Willem van Ketwich
13

También puede usar una búsqueda y reemplazo (en el editor anterior, al que se accede a través del :personaje):

Elimine los dos primeros caracteres pase lo que pase:

%s/^.\{2}//

Elimine los primeros dos caracteres de espacio en blanco (deben estar al principio y ambos deben ser espacios en blanco ... se omitirá cualquier línea que no coincida con ese criterio):

%s/^\s\{2}//
Jason Down
fuente
2
La / g al final es superflua. Solo haces una coincidencia por línea.
bhinesley
En mi opinión, esta es una gran solución
Victoria Stuart
7

Suponiendo a shiftwidth=2, luego usando shift con un rango de%

:%<
Peter Rincker
fuente
4

¿Dos espacios o dos caracteres? ( 2xhace lo último.)

:[range]s/^  //

elimina dos espacios en blanco al principio de cada línea; use %(equivalente a 1,$) como [range]hacer con esto para todo el archivo.

:[range]s/^..//

elimina los dos primeros caracteres de cada línea, sean los que sean. (Tenga en cuenta que elimina dos caracteres , no necesariamente dos columnas ; un carácter de tabulación cuenta como un carácter).

Si lo que realmente está haciendo es cambiar la sangría, puede usar el <comando para disminuirla o el >comando para aumentarla. Configurar shiftwidthpara controlar cuánto se desplaza, p. Ej.

:set shiftwidth=2
Keith Thompson
fuente
3

Probaría uno de dos enfoques:

  1. Realice la edición de columnas en el bloque para eliminar usando Ctrl+V(a menudo asignado Ctrl+Q).
  2. Grabe una macro en la primera fila usando q1(o cualquier otro número / letra que quiera indicar el registro de grabación), luego vuelva a reproducir esa macro varias veces usando @1(para usar mi ejemplo anterior. Mejor aún, use un número anterior para indicar cuántas veces para ejecutar 10@1, por ejemplo, para ejecutar esa macro 10 veces. Sin embargo, depende de lo que haya grabado: asegúrese de rebobinar el cursor 0o soltar una línea j, si es relevante.
sa125
fuente
3

También agregaría: aprenda a configurar la sangría para vim. Entonces un simple gg=Gservirá.

Luc Hermitte
fuente