1

我主要将 vim 用于乳胶。我这样做的主要原因实际上是 Ultisnips,它大大减少了我需要在 Latex 中键入的符号数量。除此之外,我使用自动配对,它为我匹配括号。我对此设置的一个小抱怨是,我不能使用制表符来扩展片段并跳出一对括号 - 相关选项是:

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

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

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

是的,我可以简单地使用另一个键,但两者都使用 tab 是最方便的。

4

1 回答 1

2

这可以通过用户函数来完成,利用UltiSnips函数的返回值。Trigger由于您已将所有内容映射到同一个键,因此我将使用组合的 UltiSnips 函数创建一个示例,该函数ExpandSnippetOrJump将全局变量设置ulti_expand_or_jump_res0如果它既不能扩展代码段也不能跳转到下一个代码段。

所以你将定义一个函数(厚颜无耻地命名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

所以要了解这是做什么的,当你按下TabVim 时会调用你的自定义函数,然后调用ExpandSnippetOrJump(). 如果该函数返回任何其他内容,但0(意味着在 UltiSnips 中有需要扩展或跳转的内容)它不会再做任何事情。但是在返回值为 时0,它会调用该AutoPairsJump()函数。

于 2020-01-21T18:00:53.877 回答