5 trucos para buscar y reemplazar en Vim

¡Hola, lectores! Hoy veremos de nuevo vim, específicamente cómo podemos buscar y reemplazar fácilmente en vim. En este artículo, veremos las 5 formas principales en que puede buscar y reemplazar y alcanzar ese objetivo de vim sin mouse. ¡Recuerde desasignar las teclas de flecha!

Tutorial de Vim: todo lo que necesita para comenzar con VIM

Tabla de contenido

El / y ? dominio

La forma más fácil y directa de buscar en vim es a través de / y ? comandos Si estás dentro de vim:

  • Presiona Esc y / uno tras otro
  • Luego ingrese la palabra que desea buscar
  • Golpea el Enter le llevará a la aparición de la palabra de búsqueda después del cursor.
  • Para moverse entre ocurrencias puede presionar la tecla n y para retroceder presione la tecla N.

Incluso puede buscar dos palabras que están una al lado de la otra simplemente escribiendo ambas palabras, esto mostrará solo aquellas ocurrencias donde las palabras están una al lado de la otra.

Si desea desactivar el resaltado, use el siguiente comando en modo normal:

                      
:noh

                    

Los ? El comando es muy similar al comando / pero busca todo el archivo al revés. En este caso, la tecla n busca hacia atrás y la tecla N busca hacia adelante.

Consulta también: 10 maneras de Exit editor vim

El * y el comando #

Si desea buscar la palabra debajo del cursor, simplemente presione la tecla * en el modo normal. El cursor se colocará en la aparición más cercana de la palabra debajo del cursor. Ahora puede presionar la tecla * de nuevo para buscar la siguiente ocurrencia, o también puede usar las teclas n y N para recorrer los resultados de la búsqueda hacia adelante o hacia atrás.

El # es lo mismo que * pero busca al revés.

Puede buscar ignorando el caso emitiendo el comando:

                      
:set ic

                    

En los dos casos anteriores, simplemente puede ubicar la palabra y, en el modo normal, presionar ciw (cambiar dentro de la palabra) para eliminar la palabra y pasar al modo de inserción. Pero cuando queremos sustituir muchas ocurrencias, este método es bastante engorroso, para eso, veamos más.

Emacs vs. Vim: diferencias entre los principales editores de terminales para Linux

El comando s (sustituto)

En vim, el comando s significa sustitución. Para sustituir una palabra, ejecute el siguiente comando en modo normal:

                      
:s/search_word/substitute_word

                    

Lo que hará este comando es sustituir solo la primera aparición de la palabra de búsqueda con la sustitución dada en la línea actual. Para sustituir la primera aparición en cada línea, agregamos un signo % que indica el archivo actual, por lo que el comando se convierte en:

                      
:%s/search_wprd/substitue_word

                    

Pero aún no hemos terminado, porque si ves de cerca, el comando anterior solo sustituye solo las primeras ocurrencias en la línea, lo que necesitamos es una sustitución total, para eso agregamos la bandera g que significa global:

                      
:%s/search_word/substitue_word/g

                    

De manera similar, si solo queremos sustituir todas las apariciones en la línea actual, entonces habríamos ejecutado el comando con la bandera g pero sin el signo % al principio:

:s/buscar_palabra/sustituir_palabra/g

Uso avanzado del comando s

¿Qué sucede si solo desea sustituir una palabra de las líneas 4 a 7? bien, podemos simplemente reemplazar el signo % al comienzo del comando para especificar el rango del comando s, entonces el comando es:

                      
:4,7s/search_word/substitue_word

                    

Si queremos buscar la distinción entre mayúsculas y minúsculas de la palabra de búsqueda, podemos agregar la i para los reemplazos que no distinguen entre mayúsculas y minúsculas y la bandera I para los reemplazos que distinguen entre mayúsculas y minúsculas. Los comandos en acción son:

                      
:4,7s/search_word/substitue_word/i
:4,7s/search_word/substitue_word/I

                    

Si simplemente desea confirmar cada cambio, podemos agregar el indicador c para eso, por lo que si no está seguro sobre el rango y los lugares de sustitución, simplemente ejecute el comando de sustitución con el indicador c en todo el archivo y confirme cuando sea necesario:

:%s/buscar_palabra/sustituir_palabra/gIc

Ahora, en el mensaje de confirmación, tienes varias opciones con cada sustitución. Para ser específico, tiene las siete opciones siguientes:

  • y –> sí, realiza la sustitución
  • n –> no, no realice la sustitución
  • a –> cambiar todas las ocurrencias después de esta
  • q –> salir sin hacer ningún cambio
  • l -> hacer de esta la última sustitución y luego salir
  • ctrl+Shift+e –> para moverse hacia abajo en la pantalla (para buscar las ocurrencias)
  • ctrl+Shift+y –> para subir la pantalla

Ahora, todo esto está bien, pero es posible que haya notado que la palabra de búsqueda no solo coincide con la palabra completa, sino también con algunos casos en los que es solo una parte de otra palabra. Para contrarrestar esto, tenemos que envolver la palabra de búsqueda dentro de un < y un >, ¡también tenemos que recordar escapar de estos caracteres mientras lo hacemos! Así que el comando ahora es:

                      
:s/<search_word>/substitute_word

                    

el comando g

El comando g representa el comando global. La sintaxis de este comando es la siguiente:

                      
:g/pattern/command

                    

Lo que esto hace es ejecutar el comando dado para las líneas que coinciden con el patrón dado en todo el documento. Digamos que estamos trabajando en el siguiente archivo:

                      
  -- Base
import XMonad
import System.Directory
import System.IO (hClose, hPutStr, hPutStrLn)
import System.Exit (exitSuccess)
import qualified XMonad.StackSet as W

                    

Ahora, por alguna razón, queremos que se eliminen todas las importaciones, podemos hacerlo usando el comando g:

                      
:g/import/d

                    

Lo que esto hace es ejecutar el comando d (eliminar) en todas las líneas que tienen la palabra importar. Del mismo modo, también podemos hacer lo contrario, es decir, podemos eliminar todas las líneas que no tengan la palabra importar:

                      
:g!/import/d
OR
:v/import/d

                    

Podemos hacer cosas realmente avanzadas con el comando g. Digamos que queremos eliminar todas las líneas vacías en un documento, para eso ejecutamos el siguiente comando:

                      
:g/^s*$/d

                    

Aquí s* significa cero o más caracteres de espacio en blanco y $ significa el final de la línea, por lo que esencialmente s*$ significa una línea vacía.

Conclusión

Así que ahí lo tienes, ahora estás armado con algunos de los mejores comandos de búsqueda y reemplazo que vim tiene para ofrecer. Si está interesado en más artículos de vim increíbles, ¡no dude en buscar aquí!

Related Posts