2009-10-14 18 views
21

¿Cómo elimino la primera palabra de cada línea en Vim?Eliminar la primera palabra de cada línea

¿Qué tal un patrón en cada línea?

+4

Creo que esta pregunta pertenece a SuperUser.com –

+0

¿por qué crees eso? vi es también un lenguaje de scripting. Esta pregunta se debe mover no cerrada, si algo – vehomzzz

+0

Cerrado como pertenece en superuser.com es lo mismo que migró a superuser.com. – tvanfosson

Respuesta

19

me gustaría utilizar algo como lo siguiente:

:%s/^\w+\s+// 

La expresión regular coincidirá con uno o más caracteres de "palabra" comenzando al principio de la línea seguido por al menos un personaje de espacio en blanco. Eliminará la palabra y cualquier espacio en blanco siguiente. Si una línea puede contener solo una palabra, y aún desea que se elimine, puede usar la alternancia para hacer coincidir el espacio en blanco o el final de la línea.

:%s/^\w+(\s+|$)// 
+0

Puede expresar esto de manera más general: :%: s/^ \\ (\ w \ {- 1,} \\) \\ (\ W \? \\)/\ 2/ De esta manera usted también no deseche lo que termine con el personaje de la palabra. (También necesitas ver qué dialecto de expresiones regulares estás hablando ...) –

3

La primera palabra (donde la palabra se define como la ausencia de espacio en blanco)

:%s/^\s*[^ ]* //g 

patrón Delete:

:%s/< insert pattern here >//g 
27

ir para críptica aquí, en cierto estilo de vi:

[email protected] 

Randy fijó esto en los comentarios a trabajar en más de 100000 líneas:

[email protected]@q 

Para los que se inician con Vim, esto se divide a:

gg - Go to first line 
qq - Record a macro into register 'q' 
[email protected] - The macro: 
      dw - delete word at cursor 
      j - go down one line 
      @q - run the macro in register 'q' 
q  - Stop recording the macro 
@q - Execute the macro in register 'q' 

En esencia, la macro es recursiva: elimina una palabra, mueve una línea hacia abajo y luego se llama de nuevo, repitiendo para cada línea hasta el final del archivo. La '@q' final es la llamada inicial (manual) necesaria para configurar la macro en cada línea.

+2

-1 - no estoy seguro de cuál es el "verdadero estilo vi", pero no tiene sentido hacer cosas crípticas y antipáticas, solo para presumir. hay una solución perfectamente legible, que también es más general. –

+3

Ah, pero alguien ya ha publicado la solución 'correcta'. Esto fue más como un código de golf. El "estilo vi verdadero" fue un desliz irónico en un editor donde: wq! es la forma correcta de salir sin cambios. No es la bestia más fácil de usar. Divulgación completa: me encanta vi y lo uso como mi editor principal. Divulgación completa: la sintaxis del comando vi no es muy comprensible. –

+9

ggqqdwj @qq @ q funcionará en cualquier número de líneas, no solo en archivos con líneas <100000. Tbh, este 'enigmático' fue lo primero que vi en mi mente sobre una expresión regular. –

4

¿Qué tal esto?
: cortar% -s -d' '-f2-

25

: normal al rescate:

:%norm dw 

Es básicamente reproduce los argumentos como si los estuviera escribiendo en condiciones normales ('! No edición ') modo.

Desde: ayuda:

: [!] Norma [al] {} comandos

ejecutar comandos modo normal {} comandos.

Esto hace posible ejecutar comandos del modo Normal escritos en la línea de comandos . {commands} se ejecuta como está escrito.

+0

¿Cómo funciona? – vehomzzz

+0

Acabo de agregar más información a mi respuesta. –

+5

Si ejecuta ': norm dw' en una línea con sangría, eliminaría la sangría en lugar de la primera palabra. Ejecutando ': norm^dw' siempre borrará la primera palabra. – nelstrom

1
:%s,^[^ ]*,, 

Desde el comienzo de la línea de solape nada, pero no un espacio y reemplazar con ninguna.

+0

Debe señalarse que esto no eliminará nada en las líneas con sangría, y que esto elimina lo que Vim llama WORDS (separado con espacios en blanco), no las palabras. –

Cuestiones relacionadas