Reemplazar un patrón con el número de línea actual


15

Me gustaría reemplazar 'x' en este archivo con el número de línea actual. Es decir, cambiar

x
x
x

a

1
2
3

Por ahora, uso una línea Perl:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

Creo que UltraEdit puede hacerlo con una selección y reemplazo vertical. ¿Se puede hacer esto en vim? (Mi ejemplo aquí asume que 'x' es todo lo que hay en una línea. Pero las líneas en mi archivo real son mucho más complicadas).

Respuestas:


23

Sí, vim puede hacer esto! Haga una búsqueda global xy reemplácela por \=printf("%d", line('.'). Por ejemplo:

:%s/x/\=printf("%d", line('.'))

También puede cambiar xa otra búsqueda, si es necesario.

Explicación:

Esto reemplaza cada ocurrencia de x(o lo que sea que busque) con el registro de evaluación \=. Este registro evalúa el código vimscript y devuelve una cadena. En este caso, el código que se evalúa es "Imprimir la línea en la que estamos como un número decimal"


9

Como mencionó seleccionar y reemplazar verticalmente, también puede hacerlo. Use CtrlVpara seleccionar el bloqueo de texto que desea reemplazar, luego cy escriba 0, para reemplazar eso con 0s. Luego, seleccione esos 0s:

ingrese la descripción de la imagen aquí

Luego presione g<c-a>( g+ Ctrla):

ingrese la descripción de la imagen aquí

Si ha reemplazado una sola columna, puede usarla gvpara volver a seleccionar rápidamente la misma área.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.