VIm snipmate <TAB> автозаполнение не работает

Это первый раз, когда я пытаюсь использовать снипмат с VIm 7.3 в Ubuntu 12.04.

мой .vimrc Конфигурация:

" kill vi compatibility
set nocompatible               " be iMproved

" -------------------------------------
" ---------snipmate--------------------
" -------------------------------------
Bundle "MarcWeber/vim-addon-mw-utils"
Bundle "tomtom/tlib_vim"
Bundle "honza/vim-snippets"

Bundle "garbas/vim-snipmate"
" -------------------------------------
 filetype plugin on

Я верю, что это все, что я хочу, а затем :BundleInstall,

Древовидная структура моего .vim/bundle является

prayag@prayag:~$ tree -d .vim/bundle/
.vim/bundle/
|-- vim-colors-solarized
|   |-- autoload
|   |-- bitmaps
|   |-- colors
|   `-- doc
|-- vim-snipmate
|   |-- after
|   |   `-- plugin
|   |-- autoload
|   |-- doc
|   |-- ftplugin
|   |-- plugin
|   `-- syntax
|-- vim-snippets
|   |-- UltiSnips
|   |-- autoload
|   `-- snippets
|       |-- coffee
|       `-- javascript
`-- vundle
    |-- after
    |   |-- ftplugin
    |   `-- plugin
    |-- autoload
    |   `-- vundle
    |-- doc
    |-- ftplugin
    |-- plugin
    |-- syntax
    `-- test
        `-- files

139 directories

НО, когда я пытаюсь проверить Java-код main фрагмент кода,

$ vi App.java
main

После нажатия <TAB> дает мне следующий результат / ошибка

main<Plug>snipMateNextOrTrigger

:verbose imap <Plug>snipMateNextOrTrigger дает мне

No mapping found

с finish раздел прокомментирован в plugin/snipMate.vim, :verbose imap <Plug>snipMateNextOrTrigger дает мне следующую информацию,

i  <Plug>snipMateNextOrTrigger * <C-R>=snipMate#TriggerSnippet()<CR>
        Last set from ~/.vim/bundle/vim-snipmate/plugin/snipMate.vim

и при нажатии <TAB>

Error detected while processing /home/prayag/.vim/bundle/vundle/autoload/snipMate.vim:                                                                              
line   15:
E122: Function <SNR>84_RemoveSnippet already exists, add ! to replace it

Тот же результат / ошибка, которую я получаю при следующей конфигурации в .vimrc,

:imap <C-J> <Plug>snipMateNextOrTrigger
:smap <C-J> <Plug>snipMateNextOrTrigger

Та же конфигурация отлично работала для другой машины с Ubuntu 13.04.

Должно быть, я что-то делаю не так, но не могу понять.

Рекомендации

Vim: плагин snipMate не запускает завершение фрагмента

1 ответ

Решение

Прежде всего, я предлагаю вам удалить :set nocompatible из вашего файла vimrc. Vim автоматически сбрасывает 'cp' вариант, если при запуске он находит личный файл vimrc (не системный файл vimrc), и если вы когда-либо :source ~/.vimrc тогда это может иметь запутанные результаты.

Полный ответ на ваш вопрос будет очень большой блок-схема устранения неполадок. Это было бы хорошо, но я не собираюсь так усердно работать. Вот краткое изложение разговора, который мы провели в комментариях для диагностики этой проблемы.

У меня установлен snipMate, но когда я вхожу "main<Tab>" в режиме вставки я получаю "main<Plug>snipMateNextOrTrigger",

Что :verbose imap <Tab> а также :verbose set cpo? сказать тебе? Проверьте :version для " версии", где - это Tiny, Small, Big, Huge (возможно, мне не хватает некоторых). (Проблема может быть в том, как <Tab> или вы находитесь в совместимом режиме, или ваша версия vim может не поддерживать карты или может не поддерживать <Tab> обозначения в картах.)

":verbose imap <Tab>" показывает, что "<Tab>" сопоставлен с "<Plug>snipMateNextOrTrigger" в "~/.vim/bundle/vim-snipmate/after/plugin/snipMate.vim"и другие вещи выглядят правильно.

Как насчет :verbose imap <Plug>snipMateNextOrTrigger? (Проблема, кажется, в том, что <Tab> сопоставлен с чем-то; что-то должно быть переназначено, но это не так.)

":verbose imap <Plug>snipMateNextOrTrigger" дает мне "Картографирование не найдено".

Это проблема. Файл plugin / snipMate.vim содержит строку inoremap <silent> <Plug>snipMateNextOrTrigger <C-R>=snipMate#TriggerSnippet()<CR>, Либо у вас нет этого файла, либо отсутствует эта строка, либо :sourceD, когда Vim запускается. Или, может быть, переменная loaded_snips определяется где-то еще. Посмотри файл, проверь :scriptnames сразу после запуска vim и выполните поиск "loaded_snips "в других ваших файлах запуска. Я думаю, что есть и другие возможности, такие как :imapclear, но это кажется маловероятным.

Файл там, и имеет правильную строку. (Сначала я посмотрел "after / plugin / snipMate.vim" вместо "plugin / snipMate.vim".) Я проверил ": scriptnames", и он указан в списке. Я не проверял другие файлы, определяющие "загруженные_знипы", но закомментировал

if exists('loaded_snips') || &cp || version < 700
    finish
endif

и получил ошибку от "snipMate.vim" в другом каталоге. Я удалил этот файл, переустановил snipMate, и теперь он работает.

Другие вопросы по тегам