GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo encontrar y reemplazar texto en Vim

¿Cómo buscas un texto en Vim?

Presione la tecla /, escriba su texto de búsqueda y presione enter. Esto es como el comando menos.

Pero este método de búsqueda de texto no le permite reemplazar el resultado encontrado.

Déjame compartir cómo puedes buscar y reemplazar en Vim .

:%s/foo/bar/gci

El comando anterior ejecutará una búsqueda que no distingue entre mayúsculas y minúsculas para encontrar todas las apariciones de su término de búsqueda (foo) con el nuevo término (bar). Con la bandera c, pide confirmar antes de reponer cualquier sustitución.

Permítanme entrar en detalle y explicar las cosas con más claridad.

Usando el comando de sustitución para buscar y reemplazar texto en Vim

Supongo que ya sabes que para ejecutar un comando en Vim, debes estar en el modo normal (también conocido como modo de comando). Presione la tecla Esc para ingresar a este modo.

Vim tiene un comando útil :substitue , también se puede usar con la versión más corta :s .

A continuación se muestra la sintaxis general del comando sustituto:

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

Analicemos esta sintaxis. Cualquier cosa entre los corchetes '[]' es opcional.

  • range :Esta parte de la sintaxis se puede utilizar si desea la sustitución entre dichas líneas. Si no menciona un rango, solo sustituirá el texto en la línea actual . (He compartido una tabla para el rango)
  • pattern :Aquí es donde especifica el texto que desea reemplazar.
  • string :Esta es la cadena que reemplazará el patrón.
  • flags :Para reemplazar todas las apariciones del patrón de búsqueda, use el g bandera. Puede especificar si desea que la coincidencia ignore mayúsculas y minúsculas, use i bandera. Para confirmar manualmente cada operación de búsqueda y reemplazo, use el c bandera.
  • count :Número de líneas para reemplazar el texto.

Ejemplos de búsqueda y reemplazo en Vim

Repasemos algunos ejemplos que demuestran el uso del comando sustituto en Vim.

A continuación se muestra la captura de pantalla del archivo que usaré para demostrar el uso del comando sustituto en Vim.

Reemplazo de texto básico

Para este ejemplo, me aseguré de que la cadena 'Hola' apareciera varias veces en al menos una línea y varias veces en el archivo.

Quiero reemplazar 'Hola' con la cadena 'HI'. A continuación se muestra el comando Vim para hacer eso:

:%s/Hello/HI/g

Reemplazar con confirmación

Para sustituir texto, pero desea una confirmación cada vez que lo haga, puede utilizar la c en el comando sustituto.

:%s/Hello/HI/gc

Como puede ver en el video, Vim me pide una confirmación cada vez antes de sustituir un patrón.

También tiene un aviso que se parece a la siguiente línea:

replace with HI (y/n/a/q/l/^E/^Y)?

Las opciones del aviso tienen el siguiente significado:

  • y:si
  • n:no
  • a:todo
  • q:sale sin sustituir, pero no se deshace una vez que ya ha sustituido el texto
  • l:sustituya esto y salga (piense en 'último')
  • ^E:Desplácese hacia arriba (no funciona en vim-tiny )
  • ^Y:Desplazarse hacia abajo (no funciona en vim-tiny )

Reemplazo que no distingue entre mayúsculas y minúsculas

Cuando quieras sustituir texto sin importar si está en mayúsculas o minúsculas, en ese caso (jaja) debes usar la i bandera en el comando sustituto.

:%s/hello/HI/gi

Si nota, todas las apariciones de 'hola' o 'Hola' e incluso 'hELLO' se reemplazan con 'HI'. Esta es una sustitución de patrón que no distingue entre mayúsculas y minúsculas.

Cada 'hola' se reemplaza con 'HI' aunque la mayoría de los 'hola' tienen una 'H' mayúscula.

Reemplazar texto en una sola línea en Vim

Para sustituir texto en una sola línea, necesitamos especificar el rango que limita el alcance de la sustitución a la línea actual.

Para eso, es mejor usar el . descriptor de rango.

:.s/Hello/HI/g

Como puede ver, solo se sustituyó el patrón en la primera línea porque usé el punto '.' descriptor de rango.

Consejo extra:usar un delimitador diferente

Mirando la sintaxis del comando sustituto, mencioné que el patrón y la cadena están separados por una barra inclinada '/'.

Pero, ¿qué pasaría si tuviera un texto con muchas barras diagonales en un patrón/cadena, como una ruta, que se repitiera en todas partes del archivo? Escapar de las barras diagonales puede ser tedioso y, a veces, es fácil pasarlo por alto.

Entonces, en lugar de usar el carácter de barra diagonal como delimitador, puede usar un delimitador diferente.

Algunos caracteres delimitadores que he visto que se usan son # , _ y @ .

Aquí hay un gif que muestra una demostración del uso de @ como delimitador en lugar de / .

Conclusión

La sustitución de texto puede ser una ocurrencia común y Vim lo tiene cubierto con una forma poderosa de buscar y reemplazar patrones con una cadena. Incluso puede mezclar expresiones regulares en el comando de sustitución de Vim.

Si está interesado en aprender más que solo los conceptos básicos de Vim, le recomiendo usar este programa de Jovica Ilic.


Linux
  1. ¿Cómo integrar el comando Mv después del comando Buscar?

  2. Cómo reemplazar todas las apariciones de una palabra en todos los archivos en la línea de comandos de Linux

  3. Editor Vi y Vim:12 potentes ejemplos de buscar y reemplazar

  4. Cómo excluir un directorio en find. dominio

  5. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

Cómo buscar para encontrar una palabra en Vim o Vi Text Editor

Cómo usar sed para buscar y reemplazar cadenas en archivos

Cómo usar marcadores y realizar una selección de texto en Vim

Cómo usar el comando SED para buscar y reemplazar cadenas en archivos

Cómo buscar y reemplazar texto, palabra o cadena en un archivo

Cómo usar Sed para buscar y reemplazar una cadena en un archivo

    Rango Descripción
    . Línea actual
    $ Última línea
    % Todas las líneas
    x Número de línea x
    .,+x Desde la línea actual hasta x líneas adicionales