在vim
中,我们可以通过键入<C-r>=
后跟1.1+2.2
等表达式在插入或命令模式下进行快速计算,以将结果输入缓冲区。
如果我在当前缓冲区中有一个现有的表达式,例如25.22 + 14.55
,有没有办法让vim评估这个表达式,并用结果替换它?
我主要对不使用外部工具的解决方案感兴趣,例如bc
。
更新:为了更明确,这是我想要在评估之前和之后缓冲区中的行。
示例输入:
25.22 + 14.55
示例输出:
39.77
答案 0 :(得分:4)
根据文档,您使用eval()
来评估表达式。
register expr-register @r
--------
...
When using the '=' register you get the expression itself, not what it
evaluates to. Use eval() to evaluate it.
要将当前行传递给eval()
,您可以使用以下内容。
:s/.*/\=eval(submatch(0))
将表达式替换为在其上运行eval的结果。
查看:h sub-replace-expression
答案 1 :(得分:1)
<C-r>"
:将默认寄存器的内容粘贴到命令行中。
您可以使用命名寄存器粘贴以下内容:
<C-r>=<C-r><register><CR>
您可以像下面的示例一样创建macro
,并在所需的行上使用@r
运行它,将该行替换为已计算的表达式:
:let @r='"ay$C^R=^Ra^M^['
,其中
"ay$
:一直到行尾注册a
C
:删除该行并进入插入模式。
^R=^Ra^M
:评估注册表a
的内容并插入
当前光标位置。
^[
:更改为命令模式
确保使用Cnrl
逐字插入Ctrl-v
字符。
例如,要插入Ctrl-r
,请按Ctrl-V
,然后按Ctrl-r
。
演示: