我正在尝试使用UltiSnips和neosnippet插件同时,因为有一些功能,而另一个没有,反之亦然。所以Mapped Ultisnips和neosnippet如下:
"UltiSnips
let g:UltiSnipsExpandTrigger="<Tab>"
let g:UltiSnipsJumpForwardTrigger="<Tab>"
let g:UltiSnipsJumpBackwardTrigger="<S-Tab>"`
和
"neosnippet
imap <C-b> <Plug>(neosnippet_expand_or_jump)
smap <C-b> <Plug>(neosnippet_expand_or_jump)
xmap <C-b> <Plug>(neosnippet_expand_target)
一切正常,直到我决定制作一个superTab,在两个插件选择模式下按Tab
键进行跳转。通过插件本身设置的以下地图,使用Tab键完成在UltiSnip中的跳转:
exec "snoremap <silent> " . g:UltiSnipsExpandTrigger . " <Esc>:call UltiSnips#ExpandSnippetOrJump()<cr>"
所以我可以在选择模式seamlessley中使用Tab键跳转。 为了让neosnippet用tab键跳转到选择模式,我改变了这样的smap:
smap <Tab> <Plug>(neosnippet_expand_or_jump)
但是这不起作用,这很自然,因为UltiSnips在neosnippet插件之后映射了它的键;所以我将映射更改为:
au InsertEnter * exec "smap " . g:UltiSnipsExpandTrigger . " <Plug>(neosnippet_expand_or_jump)"
但是现在我可以在选择模式下使用tab键跳转到neosnippet扩展片段,并且无法跳转到UltiSnips片段。所以我的问题是如何才能做到这一点?
我试过了:
au InsertEnter * exec "smap " . g:UltiSnipsExpandTrigger . " neosnippet#expandable_or_jumpable() ? '\<Plug>(neosnippet_expand_or_jump)' : '\<Esc>:call "UltiSnips#ExpandSnippetOrJump()<cr>'"
和
au InsertEnter * exec "smap " . g:UltiSnipsExpandTrigger . " exists(g:ulti_expand_or_jump_res) ? '\<Esc>:call "UltiSnips#ExpandSnippetOrJump()<cr>' : '\<Plug>(neosnippet_expand_or_jump)'"
但它们不起作用:(