当我退出并启动vim
时,我正在使用go away and come back script中的以下功能来保存和加载会话。它基本上将我的所有设置,缓冲区中的文件保存在我打开vim的目录中的session.vim
文件中。
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
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()
最近我添加了ultisnips
插件。
"Snippet engine
Plugin 'SirVer/ultisnips'
"Snippets are separated from the engine. Add this if you want them:
Plugin 'honza/vim-snippets'
现在创建session.vim
并在此之后打开vim,我得到了这个错误跟踪。当我尝试编辑时,这会在insert
模式下发生。
“。vim / vimrc”287L,9566C 处理/Users/sudobangbang/.vim/bundle/ultisnips/autoload/UltiSnips.vim时检测到错误: 第15行: 回溯(最近一次调用最后一次):
处理/Users/sudobangbang/.vim/bundle/ultisnips/autoload/UltiSnips.vim时检测到错误: 第15行: 文件“”,第1行,in 按ENTER或键入命令继续 处理/Users/sudobangbang/.vim/bundle/ultisnips/autoload/UltiSnips.vim时检测到错误: 第15行: ImportError:没有名为UltiSnips的模块
处理函数时检测到错误UltiSnips#FileTypeChanged: 第1行: Traceback(最近一次调用最后一次): 处理函数时检测到错误UltiSnips#FileTypeChanged: 第1行: NameError:名称'UltiSnips_Manager'未定义
处理函数时检测到错误UltiSnips #TrackChange: 第1行: 回溯(最近一次调用最后一次):
如果我删除加载会话的功能,它工作正常。此处还有session.vim
中包含ultisnips的所有行。
inoremap <silent> <C-Tab> ^V^R=UltiSnips#ListSnippets()^V^M
xnoremap <silent> ^V :call UltiSnips#SaveLastVisualSelection()^V^Mgvs
snoremap <silent> ^V ^V^[:call UltiSnips#ExpandSnippet()^V^M
snoremap <silent> <C-Tab> ^V^[:call UltiSnips#ListSnippets()^V^M
set runtimepath=~/.vim,~/.vim/bundle/Vundle.vim,~/.vim/bundle/syntastic,~/.vim/bundle/nerdtree,~/.vim/bundle/vim-colorschemes,~/.vim/bundle/YouCompleteMe,~/.vim/bundle/supertab,~/.vim/bundle/ultisnips ,~/.vim/bundle/vim-snippets,~/.vim/bundle/ctrlp.vim,~/.vim/bundle/vim-go,~/.vim/bundle/vim-commentary,~/.vim/bundle/vim-surround,~/.vim/bundle/vim-fugitive,~/.vim/bundle/vim-unimpaired,~/.vim/bundle/v im-repeat,~/.vim/bundle/vim-airline,~/.vim/bundle/vim-airline-themes,~/.vim/bundle/gundo.vim,~/.vim/bundle/emmet-vim,~/.vim/bundle/html5.vim,~/.vim/bundle/vim-css-color,~/.vim/bundle/python-mode,~/.vi m/bundle/vim-flake8,~/.vim/bundle/vim-ruby,~/.vim/bundle/vim-endwise,~/.vim/bundle/vim-rails,~/.vim/bundle/vim-bundler,~/.vim/bundle/vim-rake,~/.vim/bundle/vim-ruby-refactoring,~/.vim/bundle/apidock.v im,~/.vim/bundle/blockle.vim,~/.vim/bundle/vim-rspec,~/.vim/bundle/javascript-libraries-syntax.vim,~/.vim/bundle/tern_for_vim,~/.vim/bundle/vim-javascript,/usr/local/share/vim/vimfiles,/usr/local/shar e/vim/vim74,/usr/local/share/vim/vimfil
如何更改会话功能以便vim正确加载ultisnips
?
vim --version
VIM - Vi IMproved 7.4(2013年8月10日,2016年6月4日编译11:48:12)
MacOS X(unix)版本
包含的补丁:1-1864
由Homebrew编译
答案 0 :(得分:3)
我做了一个修复,但牺牲了一些功能。
我从会话加载中删除了这一行
au VimEnter * nested :call LoadSession()
并制作了一个键映射来手动加载会话
map <leader>l :call LoadSession()<CR>
@Sato Katsura评论中的假设似乎是有效的 现在我正在研究是否可以通过这个方法进入自动化部分,在加载所有插件时调用此函数。
答案 1 :(得分:0)
我使用Tim Pope的obsession.vim插件解决了这个问题,然后创建的Session.vim
文件可以通过-S Session.vim
或{{1}通常的方式加载和UltiSnips再次工作。
在readme这行可能解释了不同之处:
- [保存会话时]不要捕获选项和地图。选项有时会被删除,而地图只会干扰更新插件。
这里有一点解释:
Vim's:mksession命令与创建具有生成内容的缓冲区的插件完全兼容,因此vim-session插件包含几个流行插件的特定解决方法:
我被更普遍的SO question on plugin issues with sessions指向了vim-session插件。