1

这是第一次在ubuntu 12.04中尝试使用VIm 7.3进行 snipmate 。

我的.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 插件不触发代码片段完成

4

1 回答 1

5

首先,我建议你:set nocompatible从你的 vimrc 文件中删除。如果Vim 在启动时找到个人 vimrc 文件(而不是系统 vimrc 文件),Vim 会自动重置该'cp'选项,如果你有过:source ~/.vimrc这种情况,它可能会产生令人困惑的结果。

您的问题的完整答案将是一个非常大的故障排除流程图。那将是一件好事,但我不会那么努力工作。这是我们在评论中为诊断此问题而进行的对话的摘要。

我已经安装了snipMate,但是当我进入"main<Tab>"插入模式时,我得到"main<Plug>snipMateNextOrTrigger".

做什么:verbose imap <Tab>:verbose set cpo?告诉你什么?检查:version“<size> 版本”,其中 <size> 是 Tiny、Small、Big、Huge 之一(我可能遗漏了一些)。(问题可能是如何<Tab>映射,或者您可能处于兼容模式,或者您的 vim 版本可能不支持映射或可能不支持映射中的<Tab>符号。)

":verbose imap <Tab>"表明 "<Tab>"映射到"<Plug>snipMateNextOrTrigger"in "~/.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>. 要么您没有该文件,要么缺少该行,要么:source在 vim 启动时它不是 d 。或者,变量可能在loaded_snips其他地方定义。查看文件,:scriptnames在启动 vim 后立即检查,然后在其他启动文件中搜索“loaded_snips”。我想还有其他可能性,比如:imapclear,但这似乎不太可能。

该文件在那里,并且有正确的行。(起初我查看的是“after/plugin/snipMate.vim”而不是“plugin/snipMate.vim”。)我检查了“:scriptnames”并列出了它。我没有检查其他定义“loaded_snips”的文件,但我注释掉了

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

并从另一个目录中的“snipMate.vim”中得到一个错误。我删除了那个文件,重新安装了 snipMate,现在它可以工作了。

于 2014-03-13T02:25:04.670 回答