如何根据 vim 中的条件自动完成?

How to autocomplete per conditions in vim?

在 vim 中编码时,我在 vimrc 中为 "{(' 添加自动完成,如下所示:

inoremap " ""<ESC>i
inoremap ' ''<ESC>i
inoremap { {<Cr>}<Esc>O
inoremap ( ()<ESC>i

但我发现在函数调用或表达式的末尾手动添加额外的分号 ; 非常烦人。
示例 1:print("hello world"); => 自动完成应该是 ); 当输入 (
示例 2:if (true)while (true) => 自动完成在输入 (

时应该仅为 )

当输入单个 ( 时,如何正确自动完成示例 1 和示例 2?我这里的重点是是否有一些简单的方法可以为键映射添加if/else

正确处理所有选项可能是一项非常具有挑战性的任务。但是,如果您所要求的只是一个简单且非常不完整的示例代码,那么也许这个小片段可能会有所帮助:

inoremap <expr>( Paren()

function! Paren() abort
    return printf("()%s\<Left>",
        \ search('\v(if|while)\s*%#', 'bn', line('.')) ? "" : ";\<Left>")
endfunction

想法是将当前行(就在光标之前)与正则表达式进行匹配。根据结果​​,我们构建一个要插入的表达式。

参见:h search():h :map-expression