@ldigas Creo que las personas se sienten más cómodas encontrando la pregunta aquí (con la fuente grande, gran formato ...) que en un foro de la vieja escuela o una documentación de terminal, o, Dios no lo quiera, una manpágina
puk
66
@ldigas Personalmente, las páginas de manual b / c siempre me han asustado, no me dejan con la boca abierta. Al igual que todo lo demás en Linux, tiene una curva de aprendizaje empinada.
puk
45
@Idigas: creo que se está perdiendo el punto de que entre la inteligencia colectiva de nosotros, Google y la gestión de metaconocimiento de desbordamiento de pila, esta es simplemente una mejor manera de obtener sus respuestas: lo que necesita, no una larga lista de opciones esotéricas, también como esta página ilustra la experiencia del mundo real de las trampas, y a menudo atajos realmente ingeniosos para facilitarle la vida. Esto se aplica igualmente a casi cualquier manual que he visto (excepto tal vez el manual en línea php). ¡Viva stackoverflow!
ErichBSchulz
2
@ldigas y las personas pueden usarlo para referencia futura, ya que alguien más podría necesitarlo.
Mansuro
44
@idigas Creo que estas preguntas son reales en el sentido de que un principiante de vim no sabe mucho sobre el sistema de ayuda y cómo usarlo, pero si se vuelven más experimentados sabrán cómo encontrar su camino en vim.
Edgar Klerks
Respuestas:
494
Quieres algo como
:mksession ~/mysession.vim
Luego, puede obtener ese archivo vim y recuperará su sesión anterior:
Ooo, y casi olvido que puedes volver a cargarlo escribiendo: gvim -S ~ / mysession.vim
Benj
1
Gracias @Benj. Soy nuevo en vim. ¿Cómo puedo 'fuente' en la línea de comando?
Jogusa
1
Ooops! Lo siento Benj, me refería al modo comando. Ya lo he encontrado: ``: source ~ / mysession.vim´´.
Jogusa
8
Corto es: so ~ / file. Si desea obtener el archivo actual de una manera simple, entonces% hará el trabajo por usted.
Daniel Baulig
14
Si no especifica un nombre de archivo de sesión, se escribirá y leerá de forma predeterminada Session.vim. Entonces, si solo desea tener una sola sesión guardada en su directorio actual, puede usar :mksessiono :mksdesde vim para guardar su sesión actual, y solo vim -Spara abrirla nuevamente.
anishpatel
59
Es posible que desee establecer estas opciones de sesión en su vimrc. Especialmente las opciones son molestas cuando ha cambiado su vimrc después de haber guardado la sesión.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
¡Excelente! Tuve exactamente este problema ayer. ¡Muchas gracias!
Jogusa el
40
Tenga en cuenta que: mksession no guardará los cambios en los archivos que haya realizado. Cometí este error de cerrar vim después de guardar la sesión, suponiendo que comenzaré desde allí. Pero la próxima vez que abrí la sesión, los cambios que había realizado en los archivos habían desaparecido.
Esto debería venir con cualquier respuesta relacionada con :mksession.
Morgan Wilde
1
Sí, probablemente quieras seguir con un:wqa
JonnyRaa
11
o solo :xauna pulsación menos. ¡Hurra!
robin
También puede configurar vim para guardar automáticamente archivos (si le gusta ese tipo de cosas) en su .vimrc: vimrc au FocusLost * silent! wa Esto guardará automáticamente cada vez que el búfer pierda el foco.
grego
32
Si usa NERDTree como explorador / tablero de archivos, recomendaría el complemento xolox / vim-session en lugar del comando incorporado: mksession. Por alguna razón: mksession no puede restaurar los búferes NERDTree. Su millaje puede variar, pero pensé que compartiría mi experiencia.
Para macvim, necesito asegurarme: let g:nerdtree_tabs_open_on_gui_startup=0y let g:nerdtree_tabs_open_on_new_tab=0hacer que xolox / vim-session funcione.
Cada vez que salga de Vim, guardará la sesión actual ~/.vim/sessionsy la 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 que es bastante útil cuando trabaja en diferentes proyectos.
Simplemente edite su ~/.vimrcarchivo y agregue 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 este script solo funcionará correctamente para sistemas Unix (MacOS / Linux), debe adaptarse para funcionar en Windows.
ACTUALIZACIÓN: agregando la sugerencia de 0xc0de , puede reemplazar la VimEnterlínea de estos si desea que Vim cargue la sesión solo si no se proporcionan argumentos :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
Es posible que desee abrir sesión solo si no se proporciona ningún argumento para vim, por ejemplo. if argc() == 0 au VimEnter * nested :call LoadSession() end
0xc0de
Gracias @ 0xc0de, gran sugerencia (incluso comencé a usarlo yo mismo). He actualizado la respuesta.
mathielo
¿Cómo modificaría esto para que si abro vim con argumentos tampoco guarde esa sesión?
Dr. Manhattan
muy bueno, pero 'exe' source 'b: sessionfile` necesita un punto allí? y el problema es que la sesión de carga automática depende del directorio de inicio actual (pasar pwd) ¿cómo puedo configurarlo para que sea el último directorio de trabajo antes de salir de vim? para que pueda cargar la última sesión de trabajo en lugar de la sesión bajo ~/?
van abel
Si desea poder tener sesiones pero aún abrir archivos individuales en el directorio sin sobrescribirlo, consulte mi versión modificada de esto en la respuesta por separado: stackoverflow.com/questions/1642611/…
PMunch
6
Hay un complemento muy útil para esta tarea, vim-startify, que maneja muchas otras cosas, como archivos abiertos recientemente, etc. También tiene una interfaz muy fácil.
Lo uso desde hace un par de días y hasta ahora funciona perfectamente. Espero que te ayude.
Dado que este es el primer éxito en Google para mí (y probablemente para otros) sobre cómo trabajar con las sesiones en Vim, he decidido agregar un poco a la respuesta de @ mathielo sobre cómo hacer que esto sea automático.
Me gusta su código, pero la adición de la solución "solo si sin argumentos" parecía un poco escasa. 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 cuando salga. 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, se crea una nueva.
Acabo de probar su solución publicada anteriormente en Neovim 0.2.2 y coloqué su fragmento $HOME/.vim/plugin/sessions.vimpero no está guardando los archivos de sesión. ¯ \ _ (ツ) _ / ¯
ipatch
Este hilo, y en particular el comentario vinculado, podría ayudar: superuser.com/questions/404686/… Lo tengo en mi .vimrc y funciona bien.
Almuerzo
lo tengo funcionando, aparentemente tengo que salir (n) vim para que la sesión se escriba inserte un chiste malo Gracias de nuevo por compartir 👍
ipatch
3
Existe este maravilloso complemento llamado vim-session . Es muy poderoso. Para instalarlo:
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
He mapeado su funcionalidad en mi .vimrcarchivo de esta manera:
Ahora en modo normal simplemente escriba <leader>ssy 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, simplemente hazlo
:OpenSession
y verás tu sesión abierta.
Hay muchas otras configuraciones para agregar en su .vimrcarchivo. 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
Tuve problemas específicos con el complemento Airline y las sesiones. Cambiar a usar Obsession solucionó los problemas, fue un hallazgo sorprendente después de semanas de lucha. Ver github.com/vim-airline/vim-airline/issues/…
icc97
1
Gracias @mathielo Siguiendo el ejemplo de @mathielo, agregué la siguiente línea a .vimrc para guardar la sesión activa (si la hubiera):
au VimLeave * if this_session != "" | exe "mksession! ".this_session
Si desea poner más líneas, debe usar endif:
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
Solo necesita guardar una nueva sesión en vim con
:mks [Session filename]
y después de comenzar con
$ vim -S [Session filename]
vim iniciará la sesión y no necesita preocuparse por guardar la sesión cada vez que cierre vim.
Si no tiene una sesión activa .vimrc no hará nada. Como antes.
Eso es lo que estaba buscando! Gracias de nuevo @mathielo!
A continuación se muestra la única conf. eso realmente funcionó para mí. Lo tomé de aquí , donde también puedes 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
Para administrar varias sesiones (por directorio / repositorio), recientemente cambié del complemento vim-session a vim-workspace . La gestión de su sesión es relativamente simple y funciona bastante bien.
man
páginaRespuestas:
Quieres algo como
Luego, puede obtener ese archivo vim y recuperará su sesión anterior:
o abra vim con la opción -S:
fuente
Session.vim
. Entonces, si solo desea tener una sola sesión guardada en su directorio actual, puede usar:mksession
o:mks
desde vim para guardar su sesión actual, y solovim -S
para abrirla nuevamente.Es posible que desee establecer estas opciones de sesión en su vimrc. Especialmente las opciones son molestas cuando ha cambiado su vimrc después de haber guardado la sesión.
fuente
Tenga en cuenta que: mksession no guardará los cambios en los archivos que haya realizado. Cometí este error de cerrar vim después de guardar la sesión, suponiendo que comenzaré desde allí. Pero la próxima vez que abrí la sesión, los cambios que había realizado en los archivos habían desaparecido.
fuente
:mksession
.:wqa
:xa
una pulsación menos. ¡Hurra!.vimrc
:vimrc au FocusLost * silent! wa
Esto guardará automáticamente cada vez que el búfer pierda el foco.Si usa NERDTree como explorador / tablero de archivos, recomendaría el complemento xolox / vim-session en lugar del comando incorporado: mksession. Por alguna razón: mksession no puede restaurar los búferes NERDTree. Su millaje puede variar, pero pensé que compartiría mi experiencia.
fuente
let g:nerdtree_tabs_open_on_gui_startup=0
ylet g:nerdtree_tabs_open_on_new_tab=0
hacer que xolox / vim-session funcione.Si desea automatizar el proceso sin usar ningún complemento, puede usar Go away y volver desde Vim Tips Wiki .
Cada vez que salga de Vim, guardará la sesión actual
~/.vim/sessions
y la 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 que es bastante útil cuando trabaja en diferentes proyectos.Simplemente edite su
~/.vimrc
archivo y agregue lo siguiente:Incluso para un principiante, este script es algo fácil de entender y personalizar.
Tenga en cuenta que este script solo funcionará correctamente para sistemas Unix (MacOS / Linux), debe adaptarse para funcionar en Windows.
ACTUALIZACIÓN: agregando la sugerencia de 0xc0de , puede reemplazar la
VimEnter
línea de estos si desea que Vim cargue la sesión solo si no se proporcionan argumentos :fuente
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) ¿cómo puedo configurarlo para que sea el último directorio de trabajo antes de salir de vim? para que pueda cargar la última sesión de trabajo en lugar de la sesión bajo~/
?Hay un complemento muy útil para esta tarea, vim-startify, que maneja muchas otras cosas, como archivos abiertos recientemente, etc. También tiene una interfaz muy fácil.
Lo uso desde hace un par de días y hasta ahora funciona perfectamente. Espero que te ayude.
fuente
Dado que este es el primer éxito en Google para mí (y probablemente para otros) sobre cómo trabajar con las sesiones en Vim, he decidido agregar un poco a la respuesta de @ mathielo sobre cómo hacer que esto sea automático.
Me gusta su código, pero la adición de la solución "solo si sin argumentos" parecía un poco escasa. Esta es mi versión modificada:
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 cuando salga. 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, se crea una nueva.
fuente
$HOME/.vim/plugin/sessions.vim
pero no está guardando los archivos de sesión. ¯ \ _ (ツ) _ / ¯Existe este maravilloso complemento llamado vim-session . Es muy poderoso. Para instalarlo:
He mapeado su funcionalidad en mi
.vimrc
archivo de esta manera:Ahora en modo normal simplemente escriba
<leader>ss
y verá un comando como esteAhora agregue el nombre de su sesión
y eso es todo.
Cuando cierras Vim y lo vuelves a abrir, simplemente hazlo
y verás tu sesión abierta.
Hay muchas otras configuraciones para agregar en su
.vimrc
archivo. Consulte la documentación para ver ejemplos:Hay un buen tutorial en YouTube.
fuente
Personalmente, acabo de envolver el complemento Obsession de Tim Pope para permitir definir
sessiondir
ay evitar escribir el camino:fuente
Gracias @mathielo Siguiendo el ejemplo de @mathielo, agregué la siguiente línea a .vimrc para guardar la sesión activa (si la hubiera):
Si desea poner más líneas, debe usar endif:
Solo necesita guardar una nueva sesión en vim con
y después de comenzar con
vim iniciará la sesión y no necesita preocuparse por guardar la sesión cada vez que cierre vim.
Si no tiene una sesión activa .vimrc no hará nada. Como antes.
Eso es lo que estaba buscando! Gracias de nuevo @mathielo!
fuente
:q
lugar de:bd
... ¡Gracias!Si planea tener solo 1 sesión para el proyecto, simplemente haga
que creará un
Session.vim
archivo en el directorio actual y luego abrirá la sesión (desde el mismo directorio):Si cambia la sesión y desea guardarla:
Si planea tener varias sesiones , prefiero guardarlas en archivos ocultos en el directorio del proyecto:
Para abrirlo (desde el mismo directorio):
Guardar la sesión:
Como las sesiones se guardan en archivos ocultos, para verlas no olvides
-a
fuente
Puedes almacenar la sesión donde quieras.
Ex:
Esto almacena la sesión en D drive.
Esto se puede abrir escribiendo
en cualquiera de los archivos vim.
fuente
A continuación se muestra la única conf. eso realmente funcionó para mí. Lo tomé de aquí , donde también puedes tomar una versión más completa / compleja.
fuente
Para administrar varias sesiones (por directorio / repositorio), recientemente cambié del complemento vim-session a vim-workspace . La gestión de su sesión es relativamente simple y funciona bastante bien.
fuente