Vim如何将多次重复<cr>的键位映射简写为<cr>*4格式
Vim插入模式映射重复按键简化方案
Vim 原生的inoremap类映射命令本身不支持<cr>*4这种乘法简写语法,原生要求按键序列必须平铺书写,可通过以下方案实现类似的简化效果:
- 无插件原生实现(最常用)
使用表达式映射搭配内置repeat()函数即可,示例配置如下:
说明:inoremap <expr> <C-S-Tab> repeat('<cr>', 4)<expr>标记表示映射的右值是一个Vim表达式,执行时会取表达式的返回值作为实际触发的按键序列;repeat('<cr>',4)会直接生成4个连续的<cr>字符串,效果和手动书写4个<cr>完全一致,修改重复次数只需调整第二个参数即可,维护成本更低。 - 自定义语法支持(适合大量同类映射场景)
如果你确实需要使用<cr>*4的简写格式写配置,可以自己封装一个自定义的映射创建函数,解析*后缀的重复标记,自动生成对应的按键序列,示例封装代码如下:function! s:MapWithRepeat(mode, lhs, rhs, opts) let rhs = substitute(a:rhs, '\v<([^>]+)>\*(\d+)', '\=repeat("<".submatch(1).">", str2nr(submatch(2)))', 'g') execute a:mode.'noremap '.(a:opts ?? '').' '.a:lhs.' '.rhs endfunction " 使用示例 call s:MapWithRepeat('i', '<C-S-Tab>', '<cr>*4')
内容的提问来源于stack exchange,提问作者Ng Lok Chun
相关产品推荐
相关产品推荐

