Сделать сеанс настройки сохранить функцию играть приятно с ultisnips

Я использую следующую функцию из уйти и вернуться script, чтобы сохранить и загрузить сеансы, когда я уйду и запустите vim. Он в основном сохраняет все мои настройки, файлы в буферах и т.д. В файле session.vim в каталоге, где я открыл 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: Traceback (последний последний звонок):

Ошибка при обработке /Users/sudobangbang/.vim/bundle/ultisnips/autoload/UltiSnips.vim: строка 15:   Файл ", строка 1, в Нажмите 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: Traceback (последний последний звонок):

Если я удаляю функции для загрузки сессий, он отлично работает. Кроме того, здесь представлены все строки в session.vim, которые имеют в нем бесконечные промежутки.

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 10 августа, скомпилировано 4 июня 2016 11:48:12)
Версия MacOS X (unix)
Включенные патчи: 1-1864
Составлено Homebrew

Ответ 1

Я сделал исправление, но принося в жертву некоторые функции.

Я удалил эту строку из загрузки сеанса

au VimEnter * nested :call LoadSession()

и сделал сопоставление ключей для ручной загрузки сеанса

map <leader>l :call LoadSession()<CR>

Гипотеза в комментарии @Sato Katsura кажется действительной.
Теперь я исследую, могу ли я перейти на автоматическую часть с этой функцией, вызванной при загрузке всех плагинов.

Ответ 2

Я исправил это с помощью плагина Tim Pope obsession.vim, затем создаваемый файл Session.vim можно загрузить обычным способом либо через -S Session.vim либо через source Session.vim файл source Session.vim а UltiSnips снова работает.

В файле readme эта строка может объяснить разницу:

  • [При сохранении сеанса] Не фиксируйте параметры и карты. Параметры иногда искажаются, а карты просто мешают обновлению плагинов.

Вот несколько объяснений:

Из плагина ession vim -S README

Команда Vim: mksession на самом деле не совместима с плагинами, которые создают буферы с сгенерированным содержимым, и поэтому плагин vim -S ession содержит специальные обходные пути для пары популярных плагинов:

Я указал на плагин vim -S ession этим более общим SO вопросом о проблемах плагина с сессиями.