salir guardar cambios buscar borrar archivo session vim

session - cambios - ¿Cómo guardar y restaurar múltiples sesiones diferentes en Vim?



salir de vi linux (14)

A continuación se muestra el único conf. Eso realmente funcionó para mí. Lo tomé desde here , donde también puede tomar una versión más completa / compleja.

set viewoptions+=cursor,folds,slash,unix set viewoptions-=options augroup vimrc autocmd BufWritePost * / if expand(''%'') != '''' && &buftype !~ ''nofile'' /| mkview /| endif autocmd BufRead * / if expand(''%'') != '''' && &buftype !~ ''nofile'' /| silent loadview /| endif augroup END

Dependiendo de mi tarea en Vim tengo varias pestañas abiertas.

¿Cómo puedo guardar diferentes sesiones para su uso posterior?


Es posible que desee establecer estas opciones de sesión en su vimrc. Especialmente las opciones son molestas cuando cambias tu vimrc después de guardar la sesión.

set ssop-=options " do not store global and local values in a session set ssop-=folds " do not store folds


Gracias @mathielo Siguiendo el ejemplo de @mathielo, agregué la siguiente línea a .vimrc para guardar la sesión activa (si existe):

au VimLeave * if this_session != "" | exe "mksession! ".this_session

Si quieres poner más líneas, necesitas usar endif:

au VimLeave * if v:this_session != "" au VimLeave * exe "mksession! ".this_session au VimLeave * endif

Solo necesitas guardar una nueva sesión en vim con

:mks [Session filename]

y despues de comenzar con

$ vim -S [Session filename]

vim comenzará la sesión y no tiene que preocuparse de guardar la sesión cada vez que cierre vim.

Si no tienes una sesión activa .vimrc no hará nada. Como antes.

¡Eso es lo que estaba buscando! Gracias de nuevo @mathielo!


Hay este maravilloso plugin llamado vim-session . Es muy poderoso. Para instalarlo:

cd ~/.vim/bundle git clone https://github.com/xolox/vim-session.git

He asignado su funcionalidad en mi archivo .vimrc como este:

nnoremap <leader>so :OpenSession nnoremap <leader>ss :SaveSession nnoremap <leader>sd :DeleteSession<CR> nnoremap <leader>sc :CloseSession<CR>

Ahora, en el modo normal, simplemente escriba <leader>ss y verá un comando como este

:SaveSession

Ahora agregue el nombre de su sesión

:SaveSession namesession

y eso es todo.

Cuando cierras Vim y lo vuelves a abrir solo hazlo

:OpenSession

y verás tu sesión abierta.

Hay muchas otras configuraciones para agregar en su archivo .vimrc . Consulte la documentación para ver ejemplos:

let g:session_directory = "~/.vim/tmp/session" // the directory must be created before the sessions will be saved there let g:session_autoload = "no" // automatic reload sessions let g:session_autosave = "no" // autosave let g:session_command_aliases = 1

Hay un buen tutorial en YouTube.


Hay un complemento muy útil para esta tarea vim-startify que maneja muchas otras cosas como archivos recientemente abiertos, etc., también tiene una interfaz muy fácil.

Lo estoy usando desde hace unos días y hasta ahora está funcionando perfectamente. Espero que te ayude.


Para administrar varias sesiones (por directorio / repo), recientemente cambié del complemento vim-session al vim-workspace . La gestión de sus sesiones es relativamente simple y funciona bastante bien.


Personalmente, simplemente sessiondir complemento Obsession Tim Pope para permitirle definir un sessiondir y evitar escribir la ruta:

let g:sessiondir = $HOME . ".vim/sessions" command! -nargs=1 MkSession call MkSession(<f-args>) function! MkSession(sessionfile) if !isdirectory(g:sessiondir) call mkdir(g:sessiondir, "p") endif exe ''Obsession'' g:sessiondir . ''/'' . a:sessionfile endfunction command! -nargs=1 LoadSession call LoadSession(<f-args>) function! LoadSession(sessionfile) let a:sessionpath = g:sessiondir . a:sessionfile if (filereadable(a:sessionpath)) exe ''source '' a:sessionpath else echo "No session loaded." endif endfunction


Puedes guardar sesión donde quieras.

Ex:

:mksession! D:/session.ses

Esto almacena la sesión en D drive.

Esto se puede abrir escribiendo

:so D:/session.ses

en cualquiera de los archivos vim.


Quieres algo como

:mksession ~/mysession.vim

Luego, más tarde, puede obtener ese archivo vim y recuperará su sesión anterior:

:source ~/mysession.vim

o abre vim con la opción -S:

$ vim -S ~/mysession.vim


Si desea automatizar el proceso sin utilizar ningún complemento, puede usar Go away y volver de Vim Tips Wiki .

Cada vez que salga de Vim, se guardará la sesión actual en ~/.vim/sessions y se volverá a cargar una vez que se abra Vim. También se basa en su ruta actual, por lo que si abre Vim desde diferentes directorios, tendrá diferentes sesiones, lo cual es muy útil cuando se trabaja en diferentes proyectos.

Solo edita tu archivo ~/.vimrc y agrega lo siguiente:

function! MakeSession() let b:sessiondir = $HOME . "/.vim/sessions" . getcwd() if (filewritable(b:sessiondir) != 2) exe ''silent !mkdir -p '' b:sessiondir redraw! endif let b:filename = b:sessiondir . ''/session.vim'' exe "mksession! " . b:filename endfunction function! LoadSession() let b:sessiondir = $HOME . "/.vim/sessions" . getcwd() let b:sessionfile = b:sessiondir . "/session.vim" if (filereadable(b:sessionfile)) exe ''source '' b:sessionfile else echo "No session loaded." endif endfunction " Adding automatons for when entering or leaving Vim au VimEnter * nested :call LoadSession() au VimLeave * :call MakeSession()

Incluso para un principiante, este script es algo fácil de entender y personalizar.

Tenga en cuenta que esta secuencia de comandos solo funcionará correctamente para sistemas Unix (MacOS / Linux), debe adaptarse para funcionar en Windows.

ACTUALIZACIÓN: agregando la sugerencia de 0xc0de , puede reemplazar la línea VimEnter por estas si desea que Vim cargue la sesión solo si no se proporcionan argumentos :

if(argc() == 0) au VimEnter * nested :call LoadSession() endif


Si usa NERDTree como explorador / guión de archivos, recomendaría el complemento xolox / vim-session en lugar del comando integrado: mksession. Por alguna razón,: mksession no puede restaurar los buffers de NERDTree. Tu kilometraje puede variar, pero pensé que compartiría mi experiencia.


Tenga en cuenta que: mksession no guardará los cambios en ningún archivo que haya realizado. Cometí este error de cerrar vim después de guardar la sesión asumiendo que continuaré desde allí. Pero la próxima vez que abrí la sesión, los cambios que hice en los archivos desaparecieron.


Ya que este es el primer éxito en Google para mí (y probablemente otros) sobre cómo trabajar con las sesiones en Vim, he decidido agregar un poco a la respuesta de @ mathielo sobre cómo hacer esto automáticamente.

Me gusta su código, pero parece faltar un poco la adición de la solución "solo si sin argumentos". Esta es mi versión modificada:

function! MakeSession(overwrite) let b:sessiondir = $HOME . "/.vim/sessions" . getcwd() if (filewritable(b:sessiondir) != 2) exe ''silent !mkdir -p '' b:sessiondir redraw! endif let b:filename = b:sessiondir . ''/session.vim'' if a:overwrite == 0 && !empty(glob(b:filename)) return endif exe "mksession! " . b:filename endfunction function! LoadSession() let b:sessiondir = $HOME . "/.vim/sessions" . getcwd() let b:sessionfile = b:sessiondir . "/session.vim" if (filereadable(b:sessionfile)) exe ''source '' b:sessionfile else echo "No session loaded." endif endfunction " Adding automatons for when entering or leaving Vim if(argc() == 0) au VimEnter * nested :call LoadSession() au VimLeave * :call MakeSession(1) else au VimLeave * :call MakeSession(0) endif

El cambio notable aquí es la anulación opcional. Si abre Vim sin opciones, se abrirá cualquier sesión existente y sobrescribirá los cambios realizados al salir. Si Vim se abre con opciones, solo creará una nueva sesión si no existe ninguna, esto significa que puede abrir archivos individuales en un directorio que tiene una sesión sin sobrescribirla. Luego puede abrir Vim sin opciones para ejecutar la sesión. Si no existe una sesión, entonces crea una nueva.


Si planeas tener solo 1 sesión para el proyecto solo hazlo

:mks

que creará un archivo Session.vim en el directorio actual y luego abrirá la sesión (desde el mismo directorio):

vim -S

Si cambias la sesión y quieres guardarla:

:mks!

Esto guarda la sesión, no los archivos en sí!

Si planea tener varias sesiones , prefiero guardarlas en archivos ocultos en el directorio del proyecto:

:mks .session-name.vim

Para abrirlo (desde el mismo directorio):

vim -S .session-name.vim

Guardar la sesión:

:mks! .session-name.vim

Como las sesiones se guardan en archivos ocultos, para verlas no olvide -a

ls -a