如何在选择模式下将两个操作映射到单个键(UltiSnips和neosnippet Integration)

时间:2015-08-11 21:40:26

标签: vim ultisnips

我正在尝试使用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)'"

但它们不起作用:(

0 个答案:

没有答案