plug - Vim, NERDtree no recuperado en la sesión de restauración
vim awesome (6)
Cuando tengo un panel NERDtree y guardo una sesión Vim (mksession [nombre de archivo]), luego abro la sesión (vim -S nombre de archivo), el panel se abre y se etiqueta "NERDtree" pero no se completa. Si intento ": NERDtree" desde la línea de comandos, la ventana se llena, pero ahora se abre otro panel.
¿Alguna idea sobre este extraño comportamiento?
La forma más fácil de hacer que NERDTree actúe como se espera con las sesiones es probablemente parchear NERD_tree.vim, agregando un autocommand al grupo de autocommand de NERDTree (justo después de la línea de augroup NERDTree
):
exec "autocmd BufEnter ". s:NERDTreeBufName ."* call <SID>initNerdTreeInPlace(/"/")"
No se ha probado extensivamente, pero esto parece funcionar para mí con varios diseños y con diferentes números de ventanas de NERDTree abiertas.
Edición: En realidad, esto no funciona tan bien porque NERDTree tiene ventanas primarias y secundarias, y no hay ninguna indicación en el archivo de sesión si un búfer NERDTree es uno u otro. Parece que agregar un soporte confiable para esto al complemento no sería un gran desafío, pero es más que trivial. Mientras tanto, para casos simples, agregar la siguiente autocommand (en lugar de la anterior) podría hacer lo que quieras:
exec "autocmd BufEnter ". s:NERDTreeBufName ."* :NERDTreeToggle | :NERDTreeToggle"
O puede usar Vimpanel , tiene soporte de sesión incorporado, entre otras características.
Otra solución basada en stevelove''s:
fun! Mksession(name)
let need_tree = g:NERDTree.IsOpen()
NERDTreeClose
execute "mksession! " . a:name
if need_tree
call writefile(readfile(a:name)+[''NERDTree''], a:name)
NERDTree
endif
endfun
command! -nargs=1 Mksession call Mksession(<f-args>)
Para arreglar la sesión de NERDTress con el complemento de sesión, se deben usar los nuevos comandos de sesión integrados en el complemento de sesión: "SaveSession" y "OpenSession", en lugar de "mksession" y "source".
De acuerdo con los comentarios del autor del complemento de la sesión: El comando de vim: mksession no es realmente compatible con los complementos que crean búferes con contenido generado y debido a esta sesión. Vim incluye soluciones específicas para dichos complementos: • BufExplorer, Proyecto y árbol NERD las ventanas son compatibles; • Cuando shell.vim está instalado, el estado de pantalla completa de Vim se mantiene; • Los complementos netrw y taglist.vim son compatibles con las sesiones listas para usar.
Tal vez sea por eso que deberíamos usar los nuevos comandos para superar el problema de sesión de NERDTree.
Para obtener más detalles, consulte http://peterodding.com/code/vim/session/ .
Sólo decidí tratar con este problema yo mismo. En mi caso, la sesión se crea cuando salgo de Vim con lo siguiente en mi vimrc:
autocmd VimLeave * mksession! [filename]
También estaba intentando abrir NERDTree automáticamente cuando Vim se abrió con:
autocmd VimEnter * NERDTree
El resultado fue que mi sesión se abrió con dos instancias de NERDTree, como se describe en la publicación original. Mi solución fue simplemente cerrar NERDTree antes de guardar la sesión, de esa manera mi llamada de apertura automática solo abriría la instancia de NERDTree.
Mi solución
" Save session on quitting Vim
autocmd VimLeave * NERDTreeClose
autocmd VimLeave * mksession! [filename]
" Restore session on starting Vim
autocmd VimEnter * call MySessionRestoreFunction()
autocmd VimEnter * NERDTree
Está funcionando como un encanto para mí hasta ahora. Espero que esto ayude.
Tuve el mismo problema y durante mi investigación encontré dos soluciones:
Puede usar un complemento llamado "session.vim", que tiene un soporte básico para restaurar el NERDTree. Puede encontrarlo aquí: http://www.vim.org/scripts/script.php?script_id=3150
Descubrí por mí mismo que este complemento no es para mí, así que adopté otro enfoque. Puede configurar vim para establecer automáticamente el directorio de su búfer igual a su directorio de trabajo.
autocmd BufEnter * lcd %:p:h
Desde que NERDTree abre el directorio de trabajo cuando lo abre por primera vez, ¡ya está donde quiere estar!
Simplemente abra el NERDTree después de abrir su archivo o su sesión en este caso.
Sin embargo, dado que la magia solo funcionará por primera vez dentro de una pestaña, puede usar el siguiente comando para permitir que NERDTree encuentre su archivo en el árbol.
map <leader>r :NERDTreeFind<cr>
Para despejar el árbol, simplemente suba algunos directorios como desee utilizando el comando "p" y luego escriba "C".
Descubrí los comandos gracias a los chicos en este post: