:edit
.archivo.txt
existe, abre archivo.txt
en un buffer. Si archivo.txt
no existe, crea un nuevo buffer para archivo.txt
.<Tab>
funciona con :edit
. Por ejemplo, si tu archivo está dentro de una carpeta controller de un proyecto en Rails como por ejemplo ./app/controllers/users_controllers.rb
, puedes utilizar la tecla <Tab>
para ir expandiendo los términos rápidamente.app
, y Vim lo autocompletará pulsando Tab
. Después la "c" de la carpeta controllers
y de nuevo Tab
. Y finalmente la "u" y Tab
para que Vim autocomplete el nombre del archivo::edit
acepta comodines como argumentos. *
reemplaza a cualquier archivo en la carpeta actual. Si solo estás buscando archivos con la extensión .yml
en la carpeta actual, puedes ejecutar:.yml
que existen en la carpeta actual para poder escoger el que queramos.**
para buscar de manera recursiva. Si quieres buscar todos los archivos *.md
en tu proyecto, pero no estás seguro de en qué carpeta está, puedes ejecutar lo siguiente::edit
puede ser utilizado para ejecutar netrw
, el explorador de archivos nativo de Vim. Para hacer eso, se debe dar al comando :edit
un directorio como argumento en vez de un archivo::find
. Por ejemplo::find
::find
es similar al comando :edit
. ¿Cuál es la diferencia?:find
encuentra un archivo en la ruta o también llamado path
, mientras que :edit
no lo hace.path
. Una vez que aprendas cómo modificar tus rutas, :find
puede convertirse en una herramienta de búsqueda muy potente. Para comprobar cuales son tus rutas, ejecuta:.
significa buscar en relación al directorio del archivo abierto actual.,
significa buscar en el directorio actual./usr/include
es el directorio para archivos de librerias de compiladores de C.users_controller.rb
desde el directorio raíz, debes pasar por varios directorios (y pulsar un considerable número de veces la tecla tabulador). A menudo cuando estás trabajando con un freamework, pasas el 90% del tiempo en un directorio en particular. En esta situación solo te preocupa ir al directorio controllers/
con el mínimo de pulsaciones de teclas. Los ajustes en path
pueden acortar ese viaje entre directorios.app/controllers/
al path
actual. Aquí verás cómo puedes hacerlo::find u<Tab>
, Vim también buscará coincidencias dentro del directorio app/controllers/
de archivos que empiecen con "u".controllers/
anidado, como app/controllers/account/users_controller.rb
, Vim no encontrará users_controllers
. En su lugar es necesario añadir :set path+=app/controllers/**
así el autocompletado podrá buscar users_controller.rb
. ¡Esto es genial! Ahora puedes encontrar lo que necesitas con solo pulsar una vez la tecla tabulador en vez de 3 veces.Tab
, Vim buscará en cualquier lugar el archivo deseado, de esta manera:$PWD
hace referencia al directorio de trabajo actual. Si intentas añadir el proyecto entero a path
para que así todos los archivos puedan ser buscados al presionar el tabulador Tab
, aunque esto puede funcionar para un proyecto pequeño, hacer esto puede ralentizar tus búsquedas de manera significativa si tienes muchos archivos en tu proyecto. Recomiendo solo añadir a path
los directorios o los archivos más visitados.path
solo te llevará unos segundos y haciendo esto te ahorrarás un montón de tiempo.:vim
. Sí, se escribe :vim
. Es el diminutivo para :vimgrep
).:grep
).:vim
tiene la siguiente sintaxis:/patrón/
es el patrón de la expresión regular (regex) del término buscado.archivo
es el argumento del nombre(s) de el(los) archivo(s). De la misma forma que en :find
, también puedes pasarle los comodines *
y **
..rb
) dentro de la carpeta app/controllers/
:vim
usa la ventana quickfix
, esto es una ventana anexa en la que se muestra todas las ocurrencias que Vim ha encontrado. Para ver todos los resultados de la búsqueda, ejecutamos :copen
. Esto abre una ventana quickfix
. Aquí dejamos algunos comandos de quickfix útiles para empezar a trabajar::h quickfix
.:vim
) podría ralentizarse si tienes una gran cantidad de coincidencias. Esto es provocado porque las lee desde la memoria. Vim carga cada archivo con coincidencias como si estuvieran siendo editados. Si Vim comprueba un gran número de archivos, esto consumirá una gran cantidad de memoria.grep
de la terminal de comandos. Para buscar el termino "almuerzo" dentro de un archivo ruby dentro del directorio app/controllers/
, podemos hacer lo siguiente:/patrón
, sigue la sintaxis del comando grep para la terminal y usa "patrón"
. También muestra todos las coincidencias usando quickfix
.grepprg
para determinar qué programa externo ejecutar cuando usamos :grep
así no tienes que usar el comando grep
de la terminal. Posteriormente en este articulo, veremos cómo cambiar el comando externo predeterminado.netrw
el explorador de archivos propio de Vim. Es útil para ver la jerarquía de un proyecto. Para poder usar netrw
, necesitas estas 2 configuraciones en tu .vimrc
:netrw
, debería ser suficiente para empezar. Puedes iniciar netrw
cuando inicias Vim y darle un directorio como argumento en lugar de un archivo. Por ejemplo:netrw
dentro de Vim, podemos usar :edit
y darle un directorio como parámetro directamente en lugar del nombre de un archivo:netrw
sin darle un directorio como argumento :netrw
con los movimientos de Vim (veremos más sobre este tema en un capítulo posterior). Si necesitas crear, eliminar o renombrar un archivo o un directorio, aquí tienes una lista de comandos netrw
muy útiles::h netrw
es muy completo. Échale un vistazo si tienes tiempo.netrw
es muy simple y necesitas más, vim-vinegar es un buen complemento para mejorar netrw
. Si lo que buscas es un buscador de archivos diferente, NERDTree es una buena alternativa. ¡Pruébalos!FZF_DEFAULT_COMMAND
. En mi .zshrc
(.bashrc
si usas bash), deberíamos tener esto:-m
en FZF_DEFAULT_OPTS
. Esta opción nos permite hacer selecciones múltiples con Tab
o Shift-Tab
. No es necesario tener esta línea para que fzf funcione con Vim, pero creo que es una opción muy útil que considerar. Puede volverse muy útil cuando quieres realizar búsquedas y reemplazar en múltiples archivos, abarcaremos ese tema en un momento. El comando fzf acepta más opciones, para aprender más, revisa el repositorio de fzf o man fzf
. Bastará con que tengas export FZF_DEFAULT_COMMAND='rg'
..vimrc
en la sección de complementos. Necesitas usar el complemento fzf.vim (creado por el mismo autor de fzf).^
es una coincidencia exacta de prefijo. Para buscar una frase que comience con "bienvenidos": ^bienvenidos
.$
es una coincidencia exacta de sufijo. Para buscar una frase que finalice con "amigos": amigos$
.'
es una coincidencia exacta. Para buscar la frase "bienvenidos mis amigos": 'bienvenidos mis amigos
.|
es una coincidencia "o". Para buscar tanto "amigos" como "enemigos": amigos | enemigos
.!
es una coincidencia inversa. Para buscar una frase que contenga "bienvenidos" y no "amigos": bienvenidos !amigos
.^hola | ^bienvenidos amigos$
buscará la frase que comience tanto con "hola" como "bienvenidos" y que acabe con "amigos".:Files
. Ejecuta :Files
desde Vim y se le mostrará el símbolo del sistema de la búsqueda con fzf.Ctrl-f
. En mi archivo .vimrc
, he añadido lo siguiente::Rg
.<Leader>f
.:vim
y :grep
. :grep
utiliza la herramienta externa de búsqueda que puedes reasignar utilizando la palabra clave grepprg
. Te mostraré cómo configurar Vim para utilizar ripgrep en vez del grep de la terminal al ejecutar el comando :grep
.grepprg
así :grep
utilizará ripgrep. Añade esto en tu archivo de configuración vimrc
.man rg
.grepprg
, ahora cuando ejecutes :grep
, esto ejecutará rg --vimgrep --smart-case --follow
en vez de ejecutar grep
. Si quieres realizar una búsqueda de "donut" utilizando ripgrep, ahora puedes ejecutar el comando mencionado :grep "donut"
en vez de :grep "donut" . -R
.:grep
, este nuevo :grep
también utiliza quickfix para mostrar los resultados.:grep
en Vim, además ¿no puedo simplemente utilizar :Rg
para encontrar frases en archivos? ¿Cuanto tendré que necesitar utilizar:grep
?:grep
en Vim para buscar y reemplazar en múltiples archivos, que será lo que veremos a continuación.:grep
. Si necesitas reemplazar todos las coincidencias de la palabra "pizza" y sustituirla por "donut", esto es lo que tienes que hacer::grep pizza
utiliza ripgrep para realizar una búsqueda de todas las instancias donde aparezca la palabra "pizza" (por cierto, esto también funcionaría incluso si no has reasignado grepprg
para utilizar ripgrep. Deberías ejecutar :grep "pizza" . -R
en vez de :grep "pizza"
).:cfdo
ejecuta cualquier comando que le asignes a continuación en la lista de quickfix. En este caso, tu comando es un comando de sustitución %s/pizza/donut/g
. La tubería (|
) es un operador de cadena. Necesitarás ejecutar update
para guardar cada archivo después de ser sustituido. Veremos el comando de sustitución en profundidad en un capítulo posterior.:%bd | e#
(%bd
elimina todos los buffers y e#
abre el archivo en el que estabas).:Files
.<Tab>
/ Shift+Tab
. Esto solo es posible si tienes la opción -m
en FZF_DEFAULT_OPTS
(consulta la sección anterior de ajustes de fzf para saber qué hace la opción -m
).:bufdo %s/pizza/donut/g | update
. El comando :bufdo %s/pizza/donut/g | update
tiene un aspecto similar al anterior comando :cfdo %s/pizza/donut/g | update
. Esto es debido a que son similares. La diferencia es que en vez de realizar la sustitución en toda la lista de archivos de quickfix (:cfdo
), estás realizando la sustitución en todos los buffers abiertos en Vim (:bufdo
).