2010-11-19 11 views
22

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 está poblado Si intento ": NERDtree" desde la línea de comandos, la ventana se llena, pero ahora se abre otro panel.Vim, NERDtree no recuperado en restauración de sesión

¿Alguna idea de este extraño comportamiento?

Respuesta

1

La manera más fácil de hacer acto NERDTree como se esperaba con sesiones es probable que parchear NERD_tree.vim, la adición de un AutoCommand al grupo NERDTree AutoCommand (justo después de la línea de augroup NERDTree):

exec "autocmd BufEnter ". s:NERDTreeBufName ."* call <SID>initNerdTreeInPlace(\"\")" 

No es probado extensivamente , pero esto parece funcionar para mí con varios diseños y con diferentes números de ventanas de NERDTree abiertas.

Editar: En realidad, esto no funciona tan bien porque NERDTree tiene ventanas principales y secundarias, y no hay ninguna indicación en el archivo de sesión si un buffer NERDTree es uno u otro. Parece que agregar soporte confiable para esto al plugin no sería un gran desafío, pero es más que trivial. Mientras tanto, para los casos simples, añadiendo lo siguiente AutoCommand (en lugar de la de arriba) puede hacer lo que quiera:

exec "autocmd BufEnter ". s:NERDTreeBufName ."* :NERDTreeToggle | :NERDTreeToggle" 
+0

no funciona con corriente NERDtree 5.0 ... –

6

que tenían el mismo problema y durante mi investigación, he encontrado 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 mi cuenta que este complemento no es para mí, así que tomé 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 el NERDTree abre el directorio de trabajo cuando se abre la primera vez, ya se encuentra en la que desea ser!

Simplemente abra el NERDTree después de que haya abierto su archivo o su sesión en este caso.

Sin embargo, dado que la magia solo funcionará por primera vez en una sola pestaña, puede usar el siguiente comando para permitir que el NERDTree encuentre su archivo en el árbol.

map <leader>r :NERDTreeFind<cr> 

eliminar el desorden del árbol sólo tiene que ir a unos pocos directorys como usted deseo usando el comando "p" y escriba "C".

descubrí los comandos gracias a los chicos de este post:

https://superuser.com/questions/195022/vim-how-to-synchronize-nerdtree-with-current-opened-tab-file-path

+0

1 Para: ' "session.vim", que tiene una support' básica lo que es verdad! Y además de session.vim tiene una opción de autorestore última sesión. Exactamente lo que quiero ... –

19

acaba de decidir para hacer frente a este yo mismo asunto.En mi caso, la sesión se crea cuando deje de fumar Vim con la siguiente en mi vimrc:

autocmd VimLeave * mksession! [filename]

también estaba tratando de 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 forma 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.

+1

simple y claro. Por cierto, utilicé el código de restauración de la sesión aquí: http://stackoverflow.com/questions/5142099/auto-save-vim-session-on-quit-and-auto-reload-session-on-start/6052704#6052704 –

+0

En lugar de 'NERDTreeClose', prefiero usar las pestañas' NERDTreeTabsClose' método utilizado por [vim-nerdtree-tabs] (https://github.com/jistr/vim-nerdtree-tabs). Esta combinación también funciona perfectamente para múltiples sesiones de pestañas. – Egel

4

Para el montaje de la sesión con la sesión NERDTress plugin, los nuevos comandos de sesión incrustados en sesión plug-in: "SaveSession" y "openSession" se deben utilizar, en lugar de "mksession" y "fuente".

De acuerdo con los comentarios que el plugin de autor sesión: de Vim: comando mksession no es realmente compatible con los plug-ins que crean memorias intermedias con contenido generado y debido a esto session.vim incluye soluciones específicas para este tipo de plug-ins: • BufExplorer, Project y ventanas de árbol NERD son compatibles; • Cuando se instala shell.vim, persiste el estado de pantalla completa de Vim; • Los plug-ins netrw y taglist.vim admiten sesiones de fábrica.

Quizás es por eso que debemos usar los nuevos comandos para superar el problema de la sesión de NERDTree.

Para obtener más información, consulte http://peterodding.com/code/vim/session/.

2

O podría usar Vimpanel, tiene soporte de sesión integrado, entre otras funciones.

0

Otra solución basada en stevelove de:

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>) 
Cuestiones relacionadas