inoremap:变量超时

inoremap: variable timeoutlen

我的 .vimrc 中有两个用于插入模式的重新映射:

inoremap jk <ESC>
inoremap {<CR> {<CR>}

第一个重新映射应该有一个简短的 timeoutlen,而后者应该根本没有超时。原因:第一次重新映射需要超时,因为 jk 可能用作常规字符。另一方面,后者是代码完成,超时没有意义。

是否可以为不同的重新映射分配不同的 timeoutlen?谢谢 & BR

延长第二个映射超时的一种方法是实际上仅映射 <CR>,然后使用表达式检查它是否在 { 字符后键入。

该行为与双字符映射有些不同,因为如果您在已经存在的 { 之后键入 <CR>,映射也将起作用,这可能是可以接受的给你(或者甚至可能正是你想要的。)

由于您正在使用表达式进行检查,因此您可以进行额外的检查,例如仅在您在行尾键入 <CR> 时才应用映射(因此如果您正在使用它来拆分现有的长线。)

一个可能的实现是:

inoremap <expr> <CR>
    \ col('.') ==# col('$')
    \ && getline('.')[col('.')-2] ==# '{'
    \ ? "\<CR>}\<C-O>O"
    \ : "\<CR>"

我们在这里使用三元运算符根据条件是否成立来产生不同的输出。如果没有,我们只需映射回击键本身,这样它就可以像在所有其他上下文中一样正常工作。

对于插入右大括号的部分,我也在末尾添加了一个CTRL-O O,所以插入大括号后,它会在它之前添加一个新行并将光标留在缩进列中块内。我希望这对您有所帮助,但如果这不是您真正想要的,请随时忽略该部分。