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, Вим-беглец, Вим-чувственный, Вим-сыщик,
s:
переменные являются локальными по отношению к исходному файлу, в котором они указаны. Эта функция должна находиться в файле, в котором есть функция, которая ранее определилаs:snippets
иs:multi_snips
. - person Conspicuous Compiler   schedule 13.05.2015[]
).:set snippets_dir
имеет 2 пути, разделенных запятыми, и это выглядит хорошо. - person Christian Aichinger   schedule 13.05.2015.vimrc
не должны быть связаны, но иногда вещи взаимодействуют неожиданным образом. Можете ли вы опубликовать свой.vimrc
в своем ответе? - person Conspicuous Compiler   schedule 13.05.2015.vimrc
нетfiletype on
. Не могли бы вы попробовать добавить это и посмотреть, исправит ли это ситуацию для вас? - person Conspicuous Compiler   schedule 14.05.2015