" Automatically save the session when leaving vim
set sessionoptions=blank,buffers,curdir,help,tabpages,winsize
autocmd VimLeave * NERDTreeClose
autocmd! VimLeave * mksession! ~/Session.vim
" Automatically load the session when entering vim when no arguments were provided
if argc() == 0 && filereadable(expand('~/Session.vim'))
autocmd! VimEnter * source ~/Session.vim
autocmd VimEnter * :NERDTreeToggle | wincmd l | wincmd q
endif
" Save session on quitting Vim but we have to first close NERDTree
autocmd VimLeave * NERDTreeClose
autocmd VimLeave * mksession! ~/mysession.vim
" Open session first and then start NERDTree
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * source ~/mysession.vim
autocmd VimEnter * NERDTree
8条答案
按热度按时间a7qyws3x1#
我决定自己来处理这个问题。在我的例子中,会话是在我退出Vim时创建的,在我的Vimrc中有以下内容:
autocmd VimLeave * mksession! [filename]
我还试图自动打开NERDTree时,Vim打开了:
autocmd VimEnter * NERDTree
个结果是我的会话打开了两个NERDTree示例,就像在最初的帖子中描述的那样。我的解决方案是在保存会话之前简单地关闭NERDTree,这样我的自动打开调用将只打开NERDTree的一个示例。
我的解决方案
到目前为止,它对我来说就像一个护身符。希望这对我有帮助。
axr492tv2#
我也遇到了同样的问题,在我的研究过程中,我找到了两个解决方案:
你可以使用一个名为“session.vim”的插件,它对恢复NERDree有基本的支持。你可以在这里找到它:http://www.vim.org/scripts/script.php?script_id=3150
我自己发现这个插件不适合我,所以我采取了另一种方法。你可以配置Vim自动设置你的缓冲区的目录等于你的工作目录。
由于NERDTree在您第一次打开时会打开工作目录,因此您已经到达了您想要的位置!
在这种情况下,只需在打开文件或会话 * 之后 * 打开NERDTree即可。
然而,由于这种魔力只在一个选项卡内第一次起作用,你可以使用下面的命令让NERDTree在树中 * 查找 * 你的文件。
要整理树,只要使用“p”命令按您的意愿向上移动几个目录,然后键入“C”。
我发现了命令感谢在这个职位的家伙:
https://superuser.com/questions/195022/vim-how-to-synchronize-nerdtree-with-current-opened-tab-file-path
ars1skjm3#
要使用会话插件修复NERDTress会话,请在会话插件中嵌入新的会话命令:应该使用“SaveSession”和“OpenSession”,而不是“mksession”和“source”。
根据会话插件作者的注解:Vim的:mksession命令与使用生成的内容创建缓冲区的插件并不真正兼容,这是因为该会话。Vim包含了针对此类插件的特定解决方案:·支持BufExplorer、Project和NERD树窗口;·当安装了shell.vim时,Vim的全屏状态是持久的;·netrw和taglist.vim插件支持现成的会话。
也许这就是为什么我们应该使用新的命令来克服NERDTree会话问题。
有关详细信息,请参阅http://peterodding.com/code/vim/session/。
8cdiaqws4#
或者,您可以使用Vimpanel,它具有内置的会话支持以及其他特性。
lo8azlld5#
另一个基于stevelove的解决方案是:
rn0zuynd6#
要使NERDTree按预期方式与会话一起工作,最简单的方法可能是修补NERD_tree.vim,将一个自动命令添加到NERDTree自动命令组中(就在
augroup NERDTree
行之后):它没有经过广泛的测试,但它似乎对我的工作与几个布局和不同数量的NERDTree窗口打开。
编辑:实际上,这并不是很好,因为NERDTree有主窗口和次窗口,并且在会话文件中没有指示NERDTree缓冲区是主窗口还是次窗口。看起来在插件中添加对此的可靠支持并不是一个很大的挑战,但它不仅仅是微不足道的。同时,对于简单的情况,添加以下自动命令(而不是上面的自动命令)可能会达到所需的效果:
mutmk8jj7#
在我的例子中,NERDTree在加载会话后打开,但没有显示任何文件。下面的脚本解决了这个问题:
即:
wincmd l
转到另一个,然后使用wincmd q
关闭btxsgosb8#
示例: