VIm snipmate <tab>自动完成无法正常工作</tab>

时间:2014-03-05 09:46:50

标签: vim snipmate

这是第一次在 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

但是,当我尝试使用一些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 plug-in does not trigger snippet completion

1 个答案:

答案 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,现在它可以正常工作。