Un buffer es un archivo cargado en memoria. Vim puede mantener docenas abiertos simultáneamente sin mostrarlos en pantalla. Saber navegar y gestionar buffers es esencial para trabajar con proyectos reales.


Abreviaciones de modos:
N = Normal | I = Insert | V = Visual | C = Command | VB = Visual Block

Abrir archivos

ModoComandoAcción
C:e {archivo}Abre un archivo en el buffer actual
C:e!Recarga el archivo descartando cambios no guardados
C:e #Abre el buffer alternativo (último visitado)
C:r {archivo}Inserta el contenido de un archivo bajo el cursor
C:r !{cmd}Inserta la salida de un comando externo
NgfAbre el archivo cuyo nombre está bajo el cursor
N<Ctrl-w>gfAbre el archivo bajo el cursor en un nuevo tab

Listar y navegar buffers

ModoComandoAcción
C:lsLista todos los buffers cargados con su estado
C:buffersIgual que :ls
C:b {n}Salta al buffer número n
C:b {nombre}Salta al buffer cuyo nombre coincide (parcial)
C:bnSalta al siguiente buffer
C:bpSalta al buffer anterior
C:bfSalta al primer buffer de la lista
C:blSalta al último buffer de la lista
N<Ctrl-^>Alterna entre el buffer actual y el alternativo
C:b#Igual que <Ctrl-^>

Indicadores en :ls

IndicadorSignificado
%Buffer activo en la ventana actual
#Buffer alternativo (el anterior)
aBuffer activo y visible
hBuffer oculto (cargado pero no visible)
+Buffer con cambios no guardados
-Buffer no modificable
=Buffer de solo lectura

Cerrar y eliminar buffers

ModoComandoAcción
C:bdElimina el buffer actual de la lista
C:bd {n}Elimina el buffer número n
C:bd!Elimina el buffer descartando cambios
C:bwElimina el buffer completamente (wipe)
C:%bdElimina todos los buffers
C:%bd|e#Elimina todos los buffers excepto el actual

Guardar archivos

ModoComandoAcción
C:wGuarda el buffer actual
C:w {archivo}Guarda como un archivo nuevo
C:waGuarda todos los buffers modificados
C:wqGuarda y cierra la ventana actual
C:xGuarda solo si hay cambios y cierra
C:wqaGuarda todos y cierra Vim
C:qa!Cierra todo descartando cambios

Arglist (lista de argumentos)

ModoComandoAcción
C:argsMuestra la arglist actual
C:args {glob}Define la arglist con un patrón glob
C:nextSalta al siguiente archivo en la arglist
C:prevSalta al archivo anterior en la arglist
C:firstSalta al primer archivo de la arglist
C:lastSalta al último archivo de la arglist
C:argdo {cmd}Ejecuta un comando en cada archivo de la arglist

Operaciones en lote

ModoComandoAcción
C:bufdo {cmd}Ejecuta un comando en todos los buffers
C:bufdo %s/foo/bar/geReemplaza en todos los buffers (flag e ignora errores)
C:bufdo updateGuarda los buffers modificados
C:argdo %s/foo/bar/g | updateReemplaza y guarda en toda la arglist

Tips

  • <Ctrl-^> es el atajo más infrautilizado: alterna entre los dos últimos buffers al instante, sin escribir nada.
  • :%bd|e# es el truco estándar para limpiar todos los buffers y quedarse solo con el actual; el e# reabre el buffer que se acaba de cerrar.
  • :b {nombre} acepta coincidencia parcial: :b main es suficiente si solo hay un buffer con “main” en el nombre.
  • El flag e en :bufdo %s/foo/bar/ge evita que Vim detenga la operación cuando un buffer no contiene el patrón; imprescindible en lote.
  • :args **/*.rs redefine la arglist con todos los archivos Rust del proyecto; combinado con :argdo permite refactors masivos sin plugins.