[英]VIm snipmate <TAB> auto completion not working
这是第一次“M在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
main
代码段时, $ vi App.java
main
按<TAB>
,出现以下结果/错误
main<Plug>snipMateNextOrTrigger
:verbose imap <Plug>snipMateNextOrTrigger
给了我 No mapping found
plugin/snipMate.vim
注释了finish
部分, :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机器,相同的配置工作正常。
我一定做错了,但无法弄清楚。
首先,我建议您从vimrc文件中删除:set nocompatible
。 如果Vim在启动时发现了个人vimrc文件(而不是系统vimrc文件),并且如果您:source ~/.vimrc
它会产生令人困惑的结果,则Vim会自动重置'cp'
选项。
对于您的问题的完整答案将是非常大的故障排除流程图。 那将是一件好事,但我不会那么努力。 这是我们在评论中用于诊断此问题的对话的摘要。
我已经安装了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>"
映射到"~/.vim/bundle/vim-snipmate/after/plugin/snipMate.vim"
"<Plug>snipMateNextOrTrigger"
以及其他内容看起来不错。
:verbose imap <Plug>snipMateNextOrTrigger
怎么:verbose imap <Plug>snipMateNextOrTrigger
? (问题似乎是<Tab>
映射到某个对象;应该重新映射某个对象,但事实并非如此。)
":verbose imap <Plug>snipMateNextOrTrigger"
给了我“找不到映射”。
那就是问题所在。 文件plugin / snipMate.vim包含inoremap行inoremap <silent> <Plug>snipMateNextOrTrigger <CR>=snipMate#TriggerSnippet()<CR>
。 您可能没有该文件,或者该行丢失了,或者在vim启动时不是:source
d。 或者,也许在其他地方定义了变量loaded_snips
。 查看文件,在启动vim后立即检查:scriptnames
,然后在其他启动文件中搜索“ 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,现在它可以工作了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.