我已经可以在插入模式下映射组合键:

:inoremap abc <do stuff>


但是,它有一些缺点:该序列的部分版本,例如ab,实际上不会短时间显示这些字符,因为它是在“等待”以查看是否要键入完整命令。这是不可取的。我想映射一个字母链而不暂停输入的部分子字符串。
如果我输入ab,则暂停(并等待直到字符实际出现以上所述),然后输入c,命令未执行。我希望无论等待多长时间都可以执行该命令。

我将使用iab,但这不起作用,因为:在字符串后输入空格
我不能用它执行任意命令,只能插入文本字符串。

如果有特定字符串,有什么方法可以执行命令或击键进入插入模式,而不使用地图(每次输入a都会烦人地暂停,如果等待时间过长则无法工作)?

评论

这些缺点也适用于:cnoremap abc ...

当您执行ab 时没有延迟。

#1 楼

这是一种实现方法:

let s:inputBuffer = ''

augroup _silentInsertTrigger
    autocmd!
    autocmd InsertCharPre * call <sid>OnPreEnterChar()
    autocmd InsertLeave * call <sid>OnInsertLeave()
augroup END

function! s:OnPreEnterChar()
    let s:inputBuffer .= v:char

    if s:inputBuffer[-3:] ==# 'abc'
        echo '<do stuff>'
    endif

    return v:char
endfunction

function! s:OnInsertLeave()
    let s:inputBuffer = ''
endfunction