在Vim脚本中无需<C-r>调用表达式寄存器的方法
解决方法
在nvim -s运行的脚本中,不能直接用文本形式的<C-r>或手动输入的^R调用表达式寄存器,这些写法不会被解析为对应的控制键。以下是两种可靠的实现方式:
方法1:用:normal命令模拟插入模式按键
Vim的:normal命令支持用\<C-r>表示Ctrl+R,结合表达式寄存器的调用逻辑,脚本内容如下:
:normal i\<C-r>=\<C-r>"<CR>
i:进入插入模式\<C-r>=:触发表达式寄存器调用\<C-r>":插入"寄存器的内容作为待计算的表达式<CR>:执行表达式并退出表达式输入状态
方法2:用Ex命令直接计算并插入(更高效)
无需模拟插入模式按键,直接通过Vimscript计算表达式并插入结果:
" 计算"寄存器内容并插入到光标位置 :insert =eval(@")
如果需要将结果插入到当前行下方,用:put命令更简洁:
:put =eval(@")
@":获取"寄存器的内容eval():将内容作为Vim表达式执行计算:insert/:put:将计算结果写入文件
为什么之前的写法无效?
:insert <C-r>=<C-r>"<Enter>:Ex命令中<C-r>只是普通字符串,不会被解析为控制键^R=^R":手动输入的^R是显示字符而非实际ASCII控制码(0x12),nvim无法识别为Ctrl+R
内容的提问来源于stack exchange,提问作者Lucian Chauvin
相关产品推荐
相关产品推荐

