我看到这两种样式用于在地图中插入表达式的内容。例如:
imap ,9 <c-r>=1+1<cr>
imap <expr> ,9 1+1
就我所知,这两件事都做同样的事情:如果你在插入模式下键入2
,他们会插入,9
。
我看到一些脚本使用第一种样式而其他脚本使用第二种样式。有什么不同吗?在我看来,<expr>
样式更清晰,但是<c-r>=
样式可以实现<expr>
不能实现的用例吗?
答案 0 :(得分:4)
你的两个例子是等价的。您应该更喜欢第二种样式,因为<c-r>=
在某些情况下表现不同。最近的一个示例是<Plug> function failing, inserting as literal "<t_ý>S",其中使用<c-r>=<Plug>Func()<CR>
与表达式映射中的<Plug>Func()
相比,做了一些不同且意外的事情。
<c-r>=
的大部分用途应该是在映射中间插入表达式的结果时(或者只是手动使用表达式寄存器)。一个简单的例子是,当您点击g:some_var
,8
变量的内容
imap ,8 (<c-r>=g:some_var<cr>)
答案 1 :(得分:3)
:map-<expr>
的最大问题是文档中解释的问题:
:normal
:normal
...... 此外,i_CTRL-R
已经存在了很长时间。因此,我甚至没有尝试将旧的,经过深度测试和使用的映射迁移到i(nore)map <expr>
。