带有Ultisnips的Vim和​​映射到同一键的括号匹配(自动配对)

时间:2020-01-21 17:17:33

标签: vim ultisnips

我主要将vim用于乳胶。我这样做的主要原因实际上是Ultisnips,它极大地减少了我需要在乳胶中键入的符号数量。 伴随它,我使用自动配对,它与括号匹配。 我在此设置中遇到的一个小问题是,我无法同时使用Tab键来扩展代码段并跳到一对方括号之外-相关选项为:

let g:UltiSnipsExpandTrigger = '<tab>'
let g:UltisnipsJumpForwardTrigger = '<tab>'
let g:AutoPairsShortcutJump = '<tab>'

我想要的行为是扩展一个代码段(如果有),否则跳出括号。但这在默认情况下不起作用。我可以做些什么,例如某种条件键映射吗?

我尝试了其他解决方案,例如在Ultisnips中实现括号匹配,但从未获得令人满意的结果。

是的,我可以简单地使用另一个键,但是同时使用tab键将是最方便的。

1 个答案:

答案 0 :(得分:1)

这可以通过user functions,利用UltiSnips Trigger函数的return values完成。由于您已将所有内容映射到相同的键,因此,我将使用组合的UltiSnips函数ExpandSnippetOrJump创建一个示例,该函数将全局变量ulti_expand_or_jump_res设置为0(如果它们都不能展开也不跳到下一个。

因此,您将使用以下命令定义一个函数(俗称为Ulti_Pairs()):

function! Ulti_Pairs()
    call UltiSnips#ExpandSnippetOrJump()
    if g:ulti_expand_or_jump_res == 0
        call AutoPairsJump()
    endif
endfunction

然后,您将设置映射(此后不需要其他映射):

inoremap <Tab> <ESC>:call Ulti_Pairs()<CR>a

因此,按一下操作,按 Tab 时,Vim将调用您的自定义函数,该函数依次调用ExpandSnippetOrJump()。如果是该函数,则返回除0之外的任何内容(表示UltiSnips中有要扩展或跳转的内容),它将不再执行其他操作。但是在返回值0上,它将调用AutoPairsJump()函数。