我看到这两种样式都用于在地图中插入表达式的内容。例如:
imap ,9 <c-r>=1+1<cr>
imap <expr> ,9 1+1
Run Code Online (Sandbox Code Playgroud)
据我所知,这两个都做同样的事情:2如果你,9在插入模式下输入,它们就会插入。
我看到一些脚本使用第一种样式,而其他脚本使用第二种样式。有什么区别吗?在我看来,<expr>样式更清晰,但是是否存在<c-r>=样式可以完成无法完成的事情的用例<expr>?
你的两个例子是等价的。您应该更喜欢第二种风格,因为<c-r>=在某些情况下表现不同。最近的一个例子是 <Plug> 函数失败,插入为文字 "<t_ý>S",<c-r>=<Plug>Func()<CR>与<Plug>Func()表达式映射相比, using做了一些不同和意想不到的事情。
大多数用途<c-r>=应该是当您想在映射中间插入表达式的结果时(或者只是手动使用表达式寄存器)。一个简单的例子是,g:some_var当你点击时,你想在括号之间包含变量的内容,8
imap ,8 (<c-r>=g:some_var<cr>)
Run Code Online (Sandbox Code Playgroud)