2011-08-05 12 views
59

¿Cuál es la manera más fácil de eliminar los primeros 2 espacios para cada línea usando VIM? Básicamente está repitiendo "2x" para cada línea.vim: elimine los primeros 2 espacios para líneas múltiples

Aclaración: aquí se supone que los primeros 2 caracteres son espacios. Entonces, la pregunta es sobre hacer sangrías para múltiples líneas juntas.

+0

¿Es específicamente un espacio en blanco, o los dos primeros caracteres independientemente de lo que sean? –

+0

Son los dos primeros caracteres. Suponiendo que los dos primeros caracteres son espacios. – zzhang

+0

He mostrado una forma de hacerlo mediante búsqueda y reemplazo en el modo de editor ex. Una forma garantiza que solo lo hará para líneas que comiencen con dos espacios (y solo eliminen dos espacios). El otro solo agarrota los dos primeros personajes, independientemente de lo que sean. –

Respuesta

78

Algunas más opciones. Puedes decidir cuál es la "manera más fácil".

Quitar los 2 primeros caracteres de cada línea:

:%normal 2x 

Retire los 2 primeros caracteres de cada línea, sólo si son espacios:

:%s/^/

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

Mover muesca a la izquierda de cada línea:

:%normal << 
+10

Me encantan las 30 formas diferentes de hacer algo en Vim. Preguntas como estas presentan cosas que nunca has sabido. No tenía idea sobre el% normal. –

+0

Gracias por la aclaración en el ú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 la línea actual". Creo. No se puede encontrar mucha documentación al respecto. – Sammaron

84
  1. Entre en el modo de bloque visual con Ctrl-V (o Ctrl-Q si utiliza Ctrl-V para pasta);
  2. Seleccione el área para eliminar con las flechas;
  3. Luego presione d para eliminar el área seleccionada.
+6

ctrl-v para seleccionar qué caracteres eliminar y luego d para el corte. –

+2

Top Starred Answer! :-) –

+0

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ás eliminando antes de que realmente lo hagas. – searchengine27

4

Dos espacios o dos caracteres? (2x hace esto último.)

:[range]s/^ // 

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

:[range]s/^..// 

borra los dos primeros caracteres de cada línea, sean lo 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 disminuirlo, o el comando > para aumentarlo. Establezca shiftwidth para controlar cuánto cambia, p. Ej.

:set shiftwidth=2 
10

También es posible usar una búsqueda y reemplazo (en el editor ex, se accede a través de la : Carácter):

Retire los dos primeros caracteres no importa qué:

%s/^.\{2}// 

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

%s/^\s\{2}// 
+1

La/g al final es superflua. Solo estás haciendo un partido por línea. – bhinesley

+0

@bhinesley: Buen punto ... fuerza de hábito. Actualizado. –

6

Suponiendo una shiftwidth=2, a continuación, utilizando turno con una gama de %

:%< 
2

que iba a tratar uno de los dos enfoques:

  1. Hacer la edición de columna en el bl ock para eliminar usando Ctrl+V (a menudo asignado a Ctrl+Q).
  2. Grabe una macro en la primera fila usando q1 (o cualquier otro número/letra que desee indicar el registro de grabación), luego repita esa macro varias veces usando @1 (para usar mi ejemplo anterior. Mejor aún, use un número anterior para decirle cuántas veces ejecutar - [email protected] para ejecutar esa macro 10 veces, por ejemplo. Sin embargo, depende de lo que grabó - asegúrese de rebobinar el cursor 0 o soltar una línea j, si es relevante
2

También agregaría: aprenda cómo configurar la sangría para vim. Entonces un simple gg=G hará el truco.

Cuestiones relacionadas