Cómo buscar y reemplazar en Vim / Vi (Buscar y reemplazar)

13 gen 2021 4 min di lettura
Cómo buscar y reemplazar en Vim / Vi (Buscar y reemplazar)
Indice dei contenuti

Introducción

Este artículo describe cómo buscar y reemplazar texto en Vim / Vi.

Vim es el editor de texto de línea de comandos más popular. Viene preinstalado en macOS y la mayoría de las distribuciones de Linux. Encontrar y reemplazar texto en Vim es rápido y fácil.

Encontrar y reemplazar

En Vim, puede buscar y reemplazar texto usando el comando :substitute( :s).

Para ejecutar comandos en Vim, debe estar en modo normal, el modo predeterminado cuando inicia el editor. Para volver al modo normal desde cualquier otro modo, simplemente presione la tecla " Esc ".

La forma general del comando de reemplazo es la siguiente:

:[range]s/{pattern}/{string}/[flags] [count]

El comando busca un {pattern}en cada línea [range]y lo reemplaza con un {string}. [count]es un número entero positivo que multiplica el comando.

Si no [range], y [count]se les da, sólo se reemplaza el patrón que se encuentra en la línea actual. La línea actual es la línea donde está posicionado el cursor.

Por ejemplo, para buscar la primera aparición de la cadena ' foo' en la línea actual y reemplazarla con ' bar', usaría:

:s/foo/bar/

Para reemplazar todas las apariciones del patrón de búsqueda en la fila actual, agregue la bandera g:

:s/foo/bar/g

Si desea buscar y reemplazar texto en todo el archivo, use el carácter de porcentaje %como rango. Este carácter indica un rango desde la primera hasta la última línea del archivo:

:%s/foo/bar/g

Si {string}se omite la parte , se trata como una cadena vacía y se elimina el patrón correspondiente. El siguiente comando elimina todas las instancias de la cadena ' foo' en la línea actual:

:s/foo//g

En lugar del carácter de barra inclinada ( /), se puede utilizar cualquier otro carácter no alfanumérico de un solo byte excepto como delimitador. Esta opción es útil cuando tiene el carácter " /" en la cadena de búsqueda o en la cadena de reemplazo.

:s|foo|bar|

Para confirmar cada reemplazo, use la bandera c:

:s/foo/bar/gc
replace with bar (y/n/a/q/l/^E/^Y)?

Presione ypara reemplazar el fósforo o lpara reemplazar el fósforo y salir. Presione npara omitir el resultado actual qo Escpara cancelar el reemplazo. La opción areemplaza el partido y todas las ocurrencias restantes del partido. Para desplazar la pantalla hacia abajo, use CTRL+Yy para desplazarse hacia arriba, use CTRL+E.

También puede utilizar expresiones regulares como patrón de búsqueda. El siguiente comando reemplaza todas las líneas que comienzan con ' foo' con 'Vim':

:%s/^foo.*/Vim/gc

El símbolo ^( signo de intercalación) coincide con el comienzo de una línea y .*coincide con cualquier número de caracteres.

Mayúsculas y minúsculas (sensibilidad a mayúsculas y minúsculas)

De forma predeterminada, la operación de búsqueda distingue entre mayúsculas y minúsculas, una búsqueda de " FOO" no coincidirá con " Foo".

Para ignorar el uso de mayúsculas y minúsculas en la cadena de búsqueda, use la bandera i:

:s/Foo/bar/gi

Otra forma de ignorar las mayúsculas es agregar \cdespués del patrón de búsqueda. Por ejemplo, /Linux\cbusca e ignora mayúsculas y minúsculas.

Si ha cambiado la sensibilidad predeterminada a mayúsculas y minúsculas y desea realizar una búsqueda sensible a mayúsculas y minúsculas, use la marca I:

:s/foo/bar/gi

El método alternativo en este caso es agregar \C  después de la cadena de búsqueda.

Rango de búsqueda

Cuando no se especifica ningún rango, el comando de sustitución funciona solo en la línea actual.

El rango puede ser una línea o un rango entre dos líneas. Los especificadores de línea están separados por los caracteres ,o ;. El rango se puede especificar utilizando el número de línea absoluto o símbolos especiales.

Por ejemplo, para reemplazar todas las apariciones de " foo" con " bar" en todas las líneas desde la línea 3 a la línea 10, use este comando:

:3,10s/foo/bar/g

El rango es inclusivo, lo que significa que la primera y la última fila se incluyen en el rango.

El carácter de punto .indica la línea actual y el signo de dólar $indica la última línea. Para reemplazar ' foo' en todas las líneas desde la línea actual hasta la última, use este comando:

:.,$s/foo/bar/

El especificador de línea también se puede establecer mediante el símbolo " +" o " -", seguido de un número que se suma o resta del número de línea anterior. Si se omite el número después del símbolo, el valor predeterminado es 1.

Por ejemplo, para reemplazar cada " foo" por " bar" a partir de la línea actual y las siguientes cuatro líneas, escriba:

:.,+4s/foo/bar/g

Reemplazar toda la palabra

El comando sustituto busca el patrón como una cadena, no como una palabra completa. Por ejemplo, si está buscando " gnu", la búsqueda encuentra coincidencias donde " gnu" está incrustado en palabras más grandes, como " cygnus" o " magnum".

Para buscar una palabra completa, escriba \<para marcar el comienzo de una palabra, ingrese el patrón de búsqueda, escriba \>para marcar el final de una palabra:

Por ejemplo, para buscar la palabra " foo", usaría \<foo\>:

:s/\<foo\>/bar/

Reemplazar historial

Vim realiza un seguimiento de todos los comandos ejecutados en la sesión actual. Para explorar el historial de comandos de reemplazo anteriores, ingrese :sy use las teclas de flecha arriba / abajo para encontrar una operación de reemplazo anterior. Para ejecutar el comando, simplemente presione Enter. También puede editar el comando antes de realizar la operación.

Ejemplos

Comentarios de líneas (agregar #antes de la línea) desde 5hasta 20:

:5,20s/^/#/

Descomentar líneas 5para 20deshacer cambios anteriores:

:5,20s/^#//

Reemplace todas las apariciones de " mela", " arancia" y " mango" con " frutta":

:%s/apple\|orange\|mango/fruit/g

Elimine los espacios en blanco finales al final de cada línea:

:%s/\s\+$//e

Conclusión

Buscar y reemplazar es una característica poderosa de Vim, que le permite realizar cambios de texto rápidamente.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.