2012-05-02 14 views

Respuesta

30

hay una expresión regular-vim específico para hacer que

:%s/.*\n.*\n.*\n/\0\r/g 
  • % s es el ex comando vim para sustituir en su totalidad el archivo
  • . * \ n es una línea que incluye el final de la línea
  • \ 0 es la expresión coincidente completa
  • \ r vim manera de decir agregue una nueva línea (no \ n como uno esperaría)

Editar: si quiere algo más que una nueva línea, simplemente coloque el texto delante del \ (correctamente) expresiones regulares escapó, si contiene algunos caracteres de expresiones regulares)

+5

vim también tiene '\ {n \}' 'que coincide con las ocurrencias de un patrón N'. Por ejemplo, utilicé esto para insertar la palabra "IR" en cada centésima línea (al escribir '. * \ N' 100 veces se vuelve tedioso):'% s/\ (. * \ N \) \ {100 \}/\ 0GO \ r/g'. O habilitando el modo muy mágico ('\ v') dentro de la expresión regular, se vuelve un poco más simple de leer:'% s/\ v (. * \ N) {100}/\ 0GO \ r/' –

2

me gustaría hacer esto:

:%s/^/\=(line(".")%4==0?"\n":"")/g 

esto funciona si su requerimiento cambiado a "* añadir una nueva línea en blanco cada línea de 700 * s" :) simplemente cambia el "4"

P.S. si necesito hacer esto, no lo haré en vim. sed, awk, podría hacerlo mucho más simple.

+0

¿Puedes explicarlo? ¿Qué significa cada cmd? – Alisha

+0

'^' Representa el inicio de la línea. Estamos obteniendo la Modificación del número de la línea actual por 4, si es verdadera (igual a cero) se considera una nueva línea como una sustitución, de lo contrario, no se usa nada "". – SergioAraujo

12

Puede usar un macro. El proceso completo se ve así:

qq  " start recording to register q (you could use any register from a to z) 
o  " insert an empty line below cursor 
<Esc> " switch to normal mode 
jjj " move the cursor 3 lines downward 
q  " stop recording 

A continuación, sólo se mueven a la línea de salida y escriba [email protected] para ejecutar la macro 1000 veces.

+3

El comando final sería 'qqoEsta es la línea para agregar jjjq' y probablemente' 333 @ q' (1000/3 = 333) –

+0

@Sam Vim dejará de ejecutar la macro tan pronto como llegue al final del archivo. –

+0

Esto también es útil si desea hacer algo con el * end * de una línea en lugar de insertar una nueva línea antes de la 4ª línea o similar. – HitScan

5
" insert a blank line every 3 lines 

:%s/\v(.*\n){3}/&\r   

: .............. command 
% .............. all file 
s .............. replace 
/.............. start pattern that we will replace 
\v ............. very magic mode, see :h very-magic 
(.*\n) ......... everything including the line break 
{3} ............ quantifier 
/.............. start new pattern to replace 
& .............. corresponds to the pattern sought in (.*\n) 
\r ............. add line break 

fuente: http://www.rayninfo.co.uk/vimtips.html

Cuestiones relacionadas