这是第一次在 ubuntu 12.04 中使用 VIm 7.3 snipmate 。
.vimrc
configuration is:" 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
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 计算机。
我一定是做错了什么但是弄不清楚。
答案 0 :(得分:5)
首先,我建议您从vimrc文件中删除:set nocompatible
。如果在启动时找到个人vimrc文件(不是系统vimrc文件),Vim会自动重置'cp'
选项,如果你:source ~/.vimrc
那么它可能会产生令人困惑的结果。
对您的问题的完整答案将是一个非常大的故障排除流程图。这将是一件好事,但我不会那么努力。以下是我们在评论中对诊断此问题的对话摘要。
我安装了snipMate,但当我在插入模式下输入
"main<Tab>"
时,我得到"main<Plug>snipMateNextOrTrigger"
。
:verbose imap <Tab>
和:verbose set cpo?
告诉您什么?检查:version
以获取&#34;&lt; size&gt;版本&#34;,其中&lt; size&gt;是微小的,小的,大的,巨大的(我可能会遗漏一些)。 (问题可能是<Tab>
的映射方式,或者您可能处于兼容模式,或者您的vim版本可能不支持地图,或者可能不支持地图中的<Tab>
表示法。)
":verbose imap <Tab>"
表示&#34;<Tab>"
已映射到"<Plug>snipMateNextOrTrigger"
中的"~/.vim/bundle/vim-snipmate/after/plugin/snipMate.vim"
,其他内容看起来正确。
:verbose imap <Plug>snipMateNextOrTrigger
怎么样? (问题似乎是<Tab>
被映射到某个东西;应该重新映射某些东西,但事实并非如此。)
":verbose imap <Plug>snipMateNextOrTrigger"
给了我&#34;找不到映射&#34;。
这就是问题所在。文件plugin/snipMate.vim包含行inoremap <silent> <Plug>snipMateNextOrTrigger <C-R>=snipMate#TriggerSnippet()<CR>
。您没有该文件,它缺少该行,或者当vim启动时它不是:source
d。或者可能在其他地方定义变量loaded_snips
。查看文件,在启动vim后立即检查:scriptnames
,然后搜索&#34; loaded_snips&#34;在你的其他启动文件中。我想还有其他可能性,比如:imapclear
,但这似乎不太可能。
文件在那里,并且有正确的行。 (起初我看了&#34;在/ plugin / snipMate.vim之后&#34;而不是&#34;插件/ snipMate.vim&#34;。)我检查了&#34 ;: scriptnames&#34;它被列出来了。我没有检查定义&#34; loaded_snips&#34;的其他文件,但我注释掉了
if exists('loaded_snips') || &cp || version < 700
finish
endif
并从&#34; snipMate.vim&#34;中收到错误在另一个目录中。我删除了该文件,重新安装了snipMate,现在它可以正常工作。