我正在尝试同时使用 UltiSnips 和 neosnippet 插件,因为它们有一些功能,而另一个没有,反之亦然。所以映射的 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
。UltiSnip 中的跳转是通过 Tab 键通过插件本身设置的以下映射完成的:
exec "snoremap <silent> " . g:UltiSnipsExpandTrigger . " <Esc>:call UltiSnips#ExpandSnippetOrJump()<cr>"
所以我可以在选择模式下使用 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)'"
但他们不工作:(