Snipmate больше не расширяется

Snipmate раньше расширял сниппеты, но перестал работать. Я изменил несколько несвязанных вещей в своем vimrc, но не знаю, чем это вызвано (и у меня нет резервной копии старого файла).

Мое расследование на данный момент:

  • Нажатие на вкладку не расширяется, а вместо этого вставляется пробел, отметьте :verbose imap:

    i  <Tab>       * =TriggerSnippet()<CR>
             Last set from ~\vimfiles\bundle\snipmate.vim\after\plugin\snipMate.vim

  • Кажется разумным, интересно, что произойдет, если я наберу <C-R>=TriggerSnippet()<CR> вручную? Тот же результат, пробелы вставлены. Странный.

  • Я отредактировал несколько операторов :echo в исходном коде TriggerSnippet(), очевидно, функция вообще не выполняется?
  • Введите def в файл Python, поместите курсор на f или на пробел рядом с ним, введите :call TriggerSnippet(). На этот раз функция действительно работает (видно эхо отладки), но без расширения. Но, может быть, он действительно хочет, чтобы его вызывали из режима вставки, а не из ex.
  • Выполнение следующего фрагмента кода, который я нашел в этом вопросе, дало пустой результат:

    fun! GetSnipsInCurrentScope()
         let snips = {}
         for scope in [bufnr('%')] + split(&ft, '.') + ['_']
             call extend(snips, get(s:snippets, scope, {}), 'keep')
             call extend(snips, get(s:multi_snips, scope, {}), 'keep')
         endfor
         return snips
     endf
     echo keys(GetSnipsInCurrentScope())
     ----> []

Странный. Почему я могу запустить TriggerSnippets через команду ex, но не через <C-R>=? Что означает отсутствие определенных фрагментов? Что еще более важно, как мне это исправить?

Что касается моего конфига, то в моем vimrc ничего не упоминает Snipmate, я устанавливал его через pathogen на Vim 7.4 на Win7, раньше работало. Я использую последнюю версию git (установил ее вчера, и она работала) Snipmate, и дерево git чистое (за исключением нескольких операторов отладки, но без них оно тоже не работает).

Редактировать: Обновлено после пояснений Conspicuous Compiler о s: переменных.

Изменить 2: Плагины, которые я установил с помощью Pathogen: ctrlp-py-matcher ctrlp.vim, jedi-vim, pytest-vim-compiler, python-mode, snipmate.vim, syntastic, vim-easymotion, Вим-беглец, Вим-чувственный, Вим-сыщик,


person Christian Aichinger    schedule 13.05.2015    source источник
comment
s: переменные являются локальными по отношению к исходному файлу, в котором они указаны. Эта функция должна находиться в файле, в котором есть функция, которая ранее определила s:snippets и s:multi_snips.   -  person Conspicuous Compiler    schedule 13.05.2015
comment
Спасибо, воткнул функцию в нужный файл, сниппетов не нашел ([]). :set snippets_dir имеет 2 пути, разделенных запятыми, и это выглядит хорошо.   -  person Christian Aichinger    schedule 13.05.2015
comment
Я знаю, вы сказали, что изменения в вашем .vimrc не должны быть связаны, но иногда вещи взаимодействуют неожиданным образом. Можете ли вы опубликовать свой .vimrc в своем ответе?   -  person Conspicuous Compiler    schedule 13.05.2015
comment
Конечно, это здесь.   -  person Christian Aichinger    schedule 13.05.2015
comment
В вашем .vimrc нет filetype on. Не могли бы вы попробовать добавить это и посмотреть, исправит ли это ситуацию для вас?   -  person Conspicuous Compiler    schedule 14.05.2015
comment
Это не помогло, я думаю, что тип файла должен быть сделан vim-sensible. Я добавил список плагинов, которые я установил в исходный пост. Любые идеи, как я могу отладить это? Откуда может взяться разница между режимом вставки и ex?   -  person Christian Aichinger    schedule 14.05.2015


Ответы (1)


У меня был установлен клон snipmate из древнего репозитория. Я до сих пор не понимаю, почему он работал, а потом вдруг перестал.

Совет для других: проверьте, откуда вы получаете snipmate. Должно быть (на момент написания):

https://github.com/garbas/vim-snipmate

Если вы используете snipmate.vim, избавьтесь от его и установить правильный. Обратите внимание, что у нового vim-snipmate есть несколько зависимостей, которые вам также необходимо установить (см. репозиторий github).

Если вы уже что-то меняете, вы также можете рассмотреть возможность прямого перехода на ultisnips, который, кажется, является современной (2015 г.) заменой snipmate. Однако для этого требуется vim с поддержкой + python.

person Christian Aichinger    schedule 14.05.2015