Temporada 01: iniciándose en Vim

05. Vim: buffers

Publicado por

Hasta ahora hemos aprendido a interactuar con Vim para manipular un solo archivo. Al observar a la gente que generalmente utiliza el editor, noto que ignoran que pueden tener varios archivos abiertos a la vez, pues veo que si quieren editar un archivo diferente, salen del editor y reingresan a él para abrir ese otro archivo. Esto, además de que es una pérdida de tiempo, es una limitación que no nos impone el editor.

Al iniciar Vim, podemos indicarle qué archivo queremos editar o no indicarle ninguno, para que nos reciba con un buffer nuevo, sin embargo no estamos limitados a especificar solo un archivo. Puedes abrir los que quieras y el editor pondrá a tu disposición un buffer diferente para cada uno de ellos, y los medios para navegar entre ellos.

$ vim *.c # Inicia vim abriendo un buffer por cada archivo .c en el directorio

Bueno, ya tienes tus archivos abiertos ¿y ahora qué? Pues puedes utilizar el editor como hasta ahora lo haz hecho, con una pequeña diferencia: muchos de los comandos de Vim solo tienen efecto sobre un buffer a la vez: el actual. Esto incluye comandos como “salir” (:q) y “guardar” (:w). Si quieres que estos comandos se apliquen a todos los buffers activos, necesitas agregar el modificador a (all) a dichos comandos. De este modo ejecutarás :qa en lugar de :q y :wa en lugar de solo :w. Necesitas conocer además unos cuantos comandos nuevos para cambiar al buffer que te interesa en cada momento:

  • :ar[gs][!] Para desplegar la lista de argumentos que le pasaste al editor.
  • :[N]bn[ext][!] Para ir N buffers hacia adelante (buffer next).
  • :[N]bp[revious][!] Para ir N buffers hacia atrás (buffer previous).
  • :bf[irst][!] Para ir al buffer inicial (buffer first).
  • :bl[ast][!] Para ir al buffer final (buffer last).

La sintaxis tal vez te parezca algo extraña pero en realidad no lo es. El texto entre corchetes es opcional, por ejemplo para el comando :bnext, el segundo de la lista, el texto entre corchetes significa que opcionalmente podemos especificar cuántos buffers saltar hacia a delante [N], por ejemplo dos: :2bnext; además nos dice que el comando :bnext puede abreviarse como :bn dado que el texto [ext] también es opcional, el signo de admiración entre corchetes ([!]), significa que queremos forzar el comando; esto es porque, en caso de que tengamos cambios sin guardar en el buffer actual, cualquier intento por dejarlo fallará como una especie de advertencia de que estamos en riesgo de perder nuestros últimos cambios. Vim nos deja la decisión de volver y guardar esos cambios con :w y entonces dejar el buffer o simplemente decirle al editor “No me importa, vámonos de este buffer“, por lo que si ejecutamos :bn! nos iremos al buffer siguiente sin más preguntas. A diferencia de lo que pasa con :q!, estos comandos no descartan los cambios, puesto que al dejar un buffer este no desaparece, solo se mantiene en segundo plano, por lo que podemos regresar después y guardar esos cambios pendientes. Pero si se te va la luz antes de que eso suceda… No tengo que recordarte las consecuencias.

Puedes ver a todos estos comandos en acción en la siguiente demostración:

Manipulando varios archivos a la vez
Manipulando varios archivos a la vez

¿Y si por alguna razón quieres ver más de un archivo a la vez? No solo tenerlos abiertos, sino verlos uno junto al otro. Lo primero que viene a la mente es abrir otra terminal, y en ella iniciar otra instancia de Vim para abrir ese archivo. Así es como estamos acostumbrados como usuarios de ambientes gráficos. Pero te propongo un ejercicio mental: haz que tu mente viaje cuarenta años hacia el pasado (wow, cuarenta), es 1976 y no existen los ambientes gráficos, solo tienes la pantalla de tu consola, no hay “ventanas” como las conoces hoy ¿cómo le haces? Afortunadamente vi ya resolvió ese problema a través de las opciones -o y -O que le ha heredado a Vim. Solo necesitas utilizarlas para indicarle cómo quieres que te muestre tus archivos: de manera horizontal o vertical:

$ vim -o archivo1 archivo2 # Abre dos archivos, cada uno en un panel horizontal

Dos ventanas horizontales
Dos ventanas horizontales

$ vim -O archivo1 archivo2 # Abre dos archivos, cada uno en un panel vertical

Dos ventanas verticales
Dos ventanas verticales

Muy bonito, ¿no?¿Pero cómo mover el cursor a través de esas ventanas sin necesidad del ratón? Fácil: en modo -- NORMAL -- hay que utilizar las combinaciones de teclas ^wh, ^wj, ^wk y ^wl para moverse hacia la ventana de la izquierda, de abajo, de arriba y de la derecha respectivamente.

Las ventanas divididas de Vim no solo sirven para ver más de un archivo a la vez. También te pueden ayudar a visualizar partes lejanas entre sí del mismo archivo.

Pero, digamos que solo abriste un archivo al inicio ¿eso significa que ya no puedes abrir más una vez dentro de Vim? La respuesta es: sí puedes. Una vez dentro del editor puedes abrir más archivos utilizando uno de estos comandos:

  • :e [archivo] abre un buffer nuevo en la ventana actual para editar [archivo]
  • :sp[lit] [archivo] Divide la ventana actual horizontalmente, abre un buffer nuevo en la ventana superior para editar [archivo]
  • :vsp[lit] [archivo] Divide la ventana actual verticalmente, abre un buffer nuevo en la ventana de la izquierda para editar [archivo]

Estos comandos tienen más opciones, si te sientes con curiosidad sobre qué más puedes hacer con ellos, te recomiendo que consultes la ayuda en línea de Vim, por ejemplo :help :sp

Ayuda del comando :split
Ayuda del comando :split

Bien, ahora ya conoces una más de las características que hacen de Vim una poderosa herramienta. Sigue practicando y nos vemos en la siguiente entrega.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *