¿Cómo se abre un fichero en Vim? Multiples formas

Última actualización:

Antes de empezar con los comandos tienes que saber que todo lo que aparece en este artículo se aplica de la misma manera en Vim y Neovim. Si no sabes la diferencia entre ambos te recomiendo que te pases por el artículo de Vim vs Neovim

Lo primero que tienes que saber es que puedes abrir Vim con un fichero ya cargado, simplemente desde la terminal, escribes vim y el nombre del fichero que quieres abrir (siempre y cuando estés en la carpeta que tenga el archivo ese):

vim index.html

O para neovim:

nvim index.html

Puedes incluso pasar varios ficheros a abrir de una:

vim ./src/views/index.html package.json

Ver los ficheros abiertos en Vim

Una cosa que recomiendo mucho para evitarse líos es usar un plugin que pinte la barra de los ficheros abiertos, en mi caso uso la de vim-buftablinepero puedes usar la que quieras.

Abrir ficheros en Vim y Neovim

Bien, una vez abierto Vim para abrir un fichero simplemente tienes que apretar la tecla de los dos puntos del teclado y escribir la letra e y el fichero que quieres abrir, por ejemplo:

:e ./src/components/example.vue

Al apretar enter deberías tener el fichero abierto, y si has instalado la extensión de la barra, arriba podrás ver el nombre del fichero que tienes abierto. Si ejecutas otra vez ese comando pero pasando otro fichero pues se te debería abrir y añadir a la barra de ficheros abiertos.

Por cierto, si pones el nombre de un fichero que no existe y añades texto y le das a guardar lo que has hecho es crear el fichero en la carpeta en la que estuvieras.

Listar y abrir los ficheros de una carpeta

Una cosa que no conce mucha gente respecto al comando e es que puedes pasar un punto o una carpeta, ejemplos:

:e .
:e ./src/

Al pulsar enter lo que se te va a abrir es la lista de ficheros de la carpeta que has pasado (o de la carpeta actual si has puesto el punto). En esta lista te puedes mover usando las clásicas letras de h j k l (si no sabes para qué sirven estas teclas pásate por el artículo de Movimientos básicos en Vim).

Cuando pulses enter en esta lista, si es sobre un fichero se te abre directamente y si es sobre una carpeta te aparece todos las carpetas y ficheros internos de la misma (puedes volver hacia atrás pulsando enter sobre la línea que tiene ../ o pulsando el la tecla del guíon -).

Cambiar entre ficheros abiertos

Hay un par de comandos en Vim que te permiten cambiar entre los ficheros que tienes abiertos, concretamente son los siguientes:

  • :bprev Para cambiar al buffer anterior, es decir, al último fichero que has modificado
  • :bnext Para cambiar al buffer siguiente, es decir, al siguiente fichero que has cambiado, en caso de que no haya pues abre el último que has cambiado.

Para que te hagas una idea es como moverte entre pestañas abiertas. Puedes ir atrás una pestaña, o a la pestaña siguiente, y en caso de que no haya más pues el ciclo vuelve a empezar.

Si te has descargado la extensión que te he recomendado antes esto se ve mucho más claro porque ves las pestañas que tienes abiertas hacia la izquierda de la actual (las anteriores) y a la derecha las siguientes.

Como da mucho palo andar escribiendo estos dos comandos todo el rato, la mayoría de la gente lo que hace es asignarlos a una combinación de teclas.

En mi caso particular, tengo las siguiente config en el fichero ~/.vimrc:

map <C-d> :bnext<CR>
map <C-a> :bprev<CR>

imap <C-D> <Esc>:bnext<CR>a
imap <C-A> <Esc>:bprev<CR>a

Simplemente mapeo los dos comandos a las teclas de Control + a y Control + d.

Te recomiendo que eches un ojo al artículo de Configuración básica de Vim por si no sabes configurar Vim y quieres echar un ojo a cosas que recomiendo poner.

Árbol de carpetas completo con creación de ficheros

Como abrir carpetas y ficheros con el comando e a veces se queda corto, es bastante habitual en gente que trabaja con Vim el descargar un plugin que añada un árbol de carpetas.

El que uso yo es el de nerdtree, que es muy famoso. Una vez lo tengas instalado, puedes ejecutar el comando :NERDTree para abrir el árbol de carpetas del directorio actual

Como obviamente da toda la pereza ejecutar este comando todo el rato puedes añadir un mapeo de teclas, el que tengo puesto yo en el .vimrc es el siguiente:

nmap <Leader>nt :NERDTreeToggle<cr>

En mi caso la tecla Leader la tengo mapeada a la tecla coma, por lo que simplemente tengo que escribir en modo normal ,nt para abrir el árbol.

Como NERDTree se pueden hacer muchas más cosas, lo tengo escrito en el árticulo de Uso de NERDTree en Vim para tener árbol de carpetas y ficheros

Control + P en Vim para búsqueda de ficheros

La combinación de teclas Control + P se ha vuelto un poco universal en todos los editores e IDEs para programar. Es un comando que abre una ventana en la que poder buscar nombres de ficheros para abrirlos, en lugar de andar navegando por el árbol, es lo que se llama un fuzzy finder.

En Vim existen varios fuzzy finders, antes usaba el de fzf pero hace unos meses di el salto y cambié a telescope, mantenido por uno de los creadores de Neovim.

Lo único malo de telescope es que solo funciona si usas neovim. Si estás usando vim asecas vas a tener que usar el antes mencionado fzf.

Lo que me gusta de telescope respecto a fzf es que permite ver en una ventana la previsualización del fichero antes de abrirlo (esto es una cosa que incluso no tiene el vscode).

Lo que he hecho es, en mi .vimrc, añadir un mapeo para abrirlo con la combinación de teclas de Control + P:

nmap <C-P> :Telescope git_files hidden=true <CR>

En este caso está puesto con el modo git_files para que solo me liste los ficheros que no estén en el gitignore (ignora node_modules, la carpeta .git y ese tipo de historias).

Telescope es tan guay que incluso permite hacer búsquedas de palabras en todos los ficheros del proyecto, te lo cuento todo en su artículo de Uso del plugin de Telescope en Neovim

Conclusiones

Fijo que exiten más comandos para trabajar con ficheros en Vim, pero ahora mismo yo es lo que uso. De todas formas este artículo lo iré completando según vaya aprendiendo mejores formas de trabajar con ficheros.