Eliminar espacios en blanco para un conjunto de líneas en el editor de Vim

12

Tengo un texto como el siguiente en un archivo:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Necesito eliminar el espacio vacío antes de cada una de las líneas. Para una línea lo que hago es 0dw

Puedo repetir el mismo comando usando. pero navegando manualmente a las siguientes líneas.

Pero, ¿hay alguna manera de aplicar '0dw' a ese bloque de líneas?

Supongo que hay una manera de usar macros, pero no las he usado antes. Pero estoy dispuesto a aprenderlos si no hay otra opción.

saiy2k
fuente
+1 buena pregunta, termino haciendo lo mismo. Y bienvenido al sitio.
Sardathrion - contra el abuso SE

Respuestas:

10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Obtenga más información aquí en http://vim.wikia.com/wiki/Remove_unwanted_spaces

Si desea hacer esto para un rango particular de líneas:

:19,25s/^\s\+//

Por cierto, la mejor manera de comenzar a aprender vim es ejecutar el vimtutorcomando, le enseñará cómo usar Vim en el editor de Vim.

Nikhil Mulley
fuente
1
: le fue increíble y muchas gracias por las alternativas y el enlace :)
saiy2k
3
+1 para la mención de vimtutor, así como una buena respuesta.
Sardathrion - contra el abuso SE
1
Seleccione las líneas relevantes usando Vy moviendo el cursor para expandir la selección de línea. Luego presione :para ingresar automáticamente '<,'>, y desde allí puede usar la expresión regular de Nikhil.
UncleZeiv
1
Otra forma de hacer un rango de líneas (ya que siempre olvido los números de línea) es marcar las 2 líneas y operar en las marcas. Ejemplo, vaya a la línea 19 y presione 'ma', vaya a la línea 25 y presione 'mb', luego haga :'a,'bs/^\s\+//.
Patrick
7

Una forma alternativa de hacer esto es usar las herramientas de sangría de VIM (generalmente vinculadas a </ >). Primero necesita alguna forma de indicar qué líneas se verán afectadas. Puede usar el modo de selección visual o cualquier otro medio para especificar un rango de líneas a ser afectadas, luego use un número arbitrariamente alto o niveles de sangría para eliminar. 9<generalmente hace el truco bastante bien para eliminar al menos 9 niveles de posible sangría (pestañas / espacios) de la (s) línea (s) actual (es).

Caleb
fuente
3

Tengo enfoque para hacer esto en los siguientes pasos simples:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Explicación del tercer paso:

0 navega hasta el inicio de la línea.

dw elimina la palabra (espacios vacíos).

normalse aplica el comando 0dw.

'<,'> repite lo normal para todas las líneas seleccionadas en modo visual.

saiy2k
fuente
1

ctrl+vle permite hacer algo similar a lo que quiere pero no exactamente. Puede seleccionar un bloque visual y aplicar un comando al lote.

Sardathrion - contra el abuso SE
fuente
2
Seleccioné esas líneas en modo de bloque y este comando funcionó:: '<,'> normal 0dw
saiy2k
1
@ saiy2k :normales lo importante aquí, y creo que es la mejor respuesta aquí. ¿Podría publicarlo como respuesta?
Gilles 'SO- deja de ser malvado'