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
| Modo | Comando | Acción |
|---|---|---|
| C | :mksession | Guarda 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.vim | Carga la sesión por defecto del directorio actual |
| N | vim -S | Inicia Vim cargando Session.vim automáticamente |
| N | vim -S {archivo} | Inicia Vim cargando la sesión especificada |
Qué guarda una sesión (sessionoptions)
| Modo | Comando | Acción |
|---|---|---|
| C | :set sessionoptions? | Muestra las opciones actuales de sesión |
| C | :set sessionoptions+=tabpages | Incluye tabs en la sesión |
| C | :set sessionoptions+=winsize | Incluye el tamaño de las ventanas |
| C | :set sessionoptions-=options | Excluye las opciones de configuración |
| C | :set sessionoptions-=blank | Excluye buffers vacíos |
Valores comunes de sessionoptions:
| Valor | Qué guarda |
|---|---|
buffers | Todos los buffers cargados |
curdir | El directorio de trabajo actual |
folds | El estado de los folds |
globals | Variables globales de Vimscript |
help | Ventanas de ayuda abiertas |
localoptions | Opciones locales de cada buffer |
options | Todas las opciones globales |
resize | El tamaño total de la ventana de Vim |
tabpages | Todas las tabs abiertas |
winpos | La posición de la ventana del sistema |
winsize | El tamaño de cada split |
Vistas (mkview / loadview)
| Modo | Comando | Acción |
|---|---|---|
| C | :mkview | Guarda la vista del buffer actual |
| C | :mkview {n} | Guarda la vista en la ranura n (0–9) |
| C | :loadview | Restaura la última vista guardada del buffer |
| C | :loadview {n} | Restaura la vista desde la ranura n |
| C | :set viewdir=~/.vim/views | Define el directorio de almacenamiento de vistas |
| C | :set viewoptions=folds,cursor | Limita qué guarda :mkview |
Valores comunes de viewoptions:
| Valor | Qué guarda |
|---|---|
cursor | Posición del cursor |
folds | Estado de los folds |
slash | Convierte \ a / en rutas (Windows) |
unix | Usa saltos de línea Unix en el archivo de vista |
Viminfo / Shada
| Modo | Comando | Acción |
|---|---|---|
| C | :wviminfo | Guarda el viminfo manualmente |
| C | :wviminfo {archivo} | Guarda el viminfo en un archivo específico |
| C | :rviminfo | Carga el viminfo manualmente |
| C | :rviminfo {archivo} | Carga el viminfo desde un archivo específico |
| C | :set viminfo='100,<50,s10,h | Configura qué persiste en viminfo |
Valores comunes de viminfo:
| Valor | Qué guarda |
|---|---|
'n | Hasta n marks de archivos recientes |
<n | Hasta n líneas por registro |
sn | Registros de hasta n KB |
h | Desactiva 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 -Ssin argumentos es el flujo más rápido para retomar trabajo: buscaSession.vimen el directorio actual y restaura todo el estado.:mksession!sobreescribe sin preguntar; asígnalo a un mapping como<leader>sspara guardar la sesión con un solo atajo durante el trabajo.- Excluir
optionsdesessionoptionsevita que la sesión sobreescriba configuraciones definidas en elvimrcal restaurar. :mkviewy:loadviewson más granulares que:mksession: operan buffer por buffer y son ideales para persistir folds y posición del cursor en archivos individuales.- El
viminfopersiste entre todas las sesiones (historial de comandos, marks, registros), mientras que:mksessionguarda el layout de una sesión de trabajo específica; no son equivalentes sino complementarios.