Vim: Gestión de sesiones

Una sesión en Vim guarda el estado completo del editor: buffers abiertos, splits, tabs, marks, registros y opciones. Permite retomar exactamente donde se dejó el trabajo sin reconfigurar manualmente.


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

Crear y cargar sesiones

ModoComandoAcción
C:mksessionGuarda la sesión en Session.vim (directorio actual)
C:mksession {archivo}Guarda la sesión en el archivo especificado
C:mksession! {archivo}Sobreescribe la sesión existente sin pedir confirmación
C:source {archivo}Carga una sesión guardada
C:source Session.vimCarga la sesión por defecto del directorio actual
Nvim -SInicia Vim cargando Session.vim automáticamente
Nvim -S {archivo}Inicia Vim cargando la sesión especificada

Qué guarda una sesión (sessionoptions)

ModoComandoAcción
C:set sessionoptions?Muestra las opciones actuales de sesión
C:set sessionoptions+=tabpagesIncluye tabs en la sesión
C:set sessionoptions+=winsizeIncluye el tamaño de las ventanas
C:set sessionoptions-=optionsExcluye las opciones de configuración
C:set sessionoptions-=blankExcluye buffers vacíos

Valores comunes de sessionoptions:

ValorQué guarda
buffersTodos los buffers cargados
curdirEl directorio de trabajo actual
foldsEl estado de los folds
globalsVariables globales de Vimscript
helpVentanas de ayuda abiertas
localoptionsOpciones locales de cada buffer
optionsTodas las opciones globales
resizeEl tamaño total de la ventana de Vim
tabpagesTodas las tabs abiertas
winposLa posición de la ventana del sistema
winsizeEl tamaño de cada split

Vistas (mkview / loadview)

ModoComandoAcción
C:mkviewGuarda la vista del buffer actual
C:mkview {n}Guarda la vista en la ranura n (0–9)
C:loadviewRestaura la última vista guardada del buffer
C:loadview {n}Restaura la vista desde la ranura n
C:set viewdir=~/.vim/viewsDefine el directorio de almacenamiento de vistas
C:set viewoptions=folds,cursorLimita qué guarda :mkview

Valores comunes de viewoptions:

ValorQué guarda
cursorPosición del cursor
foldsEstado de los folds
slashConvierte \ a / en rutas (Windows)
unixUsa saltos de línea Unix en el archivo de vista

Viminfo / Shada

ModoComandoAcción
C:wviminfoGuarda el viminfo manualmente
C:wviminfo {archivo}Guarda el viminfo en un archivo específico
C:rviminfoCarga el viminfo manualmente
C:rviminfo {archivo}Carga el viminfo desde un archivo específico
C:set viminfo='100,<50,s10,hConfigura qué persiste en viminfo

Valores comunes de viminfo:

ValorQué guarda
'nHasta n marks de archivos recientes
<nHasta n líneas por registro
snRegistros de hasta n KB
hDesactiva el resaltado al cargar
%Lista de buffers abiertos
!Variables globales en mayúsculas

Automatizar sesiones

Guardado automático al salir y carga al entrar en vimrc:

" Guardar sesión al salir
autocmd VimLeave * mksession! ~/.vim/session/auto.vim

" Cargar sesión si Vim se abre sin argumentos
autocmd VimEnter * nested
  \ if argc() == 0 && filereadable(expand('~/.vim/session/auto.vim')) |
  \   source ~/.vim/session/auto.vim |
  \ endif

Guardado y restauración automática de vistas por buffer:

autocmd BufWinLeave * mkview
autocmd BufWinEnter * silent! loadview

Tips

  • vim -S sin argumentos es el flujo más rápido para retomar trabajo: busca Session.vim en el directorio actual y restaura todo el estado.
  • :mksession! sobreescribe sin preguntar; asígnalo a un mapping como <leader>ss para guardar la sesión con un solo atajo durante el trabajo.
  • Excluir options de sessionoptions evita que la sesión sobreescriba configuraciones definidas en el vimrc al restaurar.
  • :mkview y :loadview son más granulares que :mksession: operan buffer por buffer y son ideales para persistir folds y posición del cursor en archivos individuales.
  • El viminfo persiste entre todas las sesiones (historial de comandos, marks, registros), mientras que :mksession guarda el layout de una sesión de trabajo específica; no son equivalentes sino complementarios.