Vim:重启后重新打开新会话中的所有先前文件

时间:2017-11-16 16:29:02

标签: vim

我通常有很长时间的vim会话,有几十个文件打开。偶尔,我需要重新启动vim,比如安装一个新的插件或应用一些新的配置。重启后如何重新打开以前的所有文件?谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用builtin sessions,也许使用vim-session plugin

Vim会话包含有关您正在编辑的内容的所有信息。

这包括文件列表,窗口布局,全局变量, 选项和其他信息。 (完全记住的是受到控制的 'sessionoptions'选项。)

命令

:mksession mysession.vim

将当前会话保存到指定文件中。下次启动vim时,您可以加载会话:

vim -S mysession.vim

或在vim内部

:source mysession.vim

您可以在VimLeave自动命令上自动保存会话并在VimEnter上重新加载会话,但是在调用vim时要小心恢复会话,例如,从git。

答案 1 :(得分:2)

以下是从我的配置中提取的自动会话保存/加载的基本设置:

if (el.Name == "ADD")
                    {
                       Console.WriteLine("Item {0} ", el.Attribute("invent_id").Value + " was successfully added.");
                        Console.ReadLine();

                        OdbcCommand Command1 = new OdbcCommand("LOAD XML LOCAL INFILE 'C:/Users/Adam/Documents/Update.xml' INTO TABLE item ROWS IDENTIFIED BY '<ADD>'", connection);
                        connection.Open();
                        OdbcDataReader reader = Command1.ExecuteReader();
                        connection.Close();
                    }

如果你在没有参数的情况下运行let s:session_loaded = 1 augroup autosession " load last session on start " Note: without 'nested' filetypes are not restored. autocmd VimEnter * nested call s:session_vim_enter() autocmd VimLeavePre * call s:session_vim_leave() augroup END function! s:session_vim_enter() if bufnr('$') == 1 && bufname('%') == '' && !&mod && getline(1, '$') == [''] execute 'silent source ~/.vim/lastsession.vim' else let s:session_loaded = 0 endif endfunction function! s:session_vim_leave() if s:session_loaded == 1 let sessionoptions = &sessionoptions try set sessionoptions-=options set sessionoptions+=tabpages execute 'mksession! ~/.vim/lastsession.vim' finally let &sessionoptions = sessionoptions endtry endif endfunction ,它只会恢复会话,所以如果你vim进行快速编辑,它就不会触及上一个会话。

Bonus(这也将恢复文件中的光标位置):

vim somefile.txt