使会话设置保存功能与ultisnips

时间:2016-06-23 06:59:25

标签: macos session vim

当我退出并启动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编译

2 个答案:

答案 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-session plugin README

  

Vim's:mksession命令与创建具有生成内容的缓冲区的插件完全兼容,因此vim-session插件包含几个流行插件的特定解决方法:

我被更普遍的SO question on plugin issues with sessions指向了vim-session插件。