表达式寄存器的目的是什么?

时间:2011-08-11 14:33:28

标签: vim

刚看了http://www.derekwyatt.org/vim/vim-tutorial-videos/vim-advanced-tutorial-videos/#expression-register,我看不到使用<c-r>= vs <c-o>normal或类似的东西有什么好处(虽然我确定这只是因为我不是理解某事)

2 个答案:

答案 0 :(得分:38)

它有很多有趣的用途,很多很多。在Derek的视频中,它曾被用来打电话 外部脚本。关键是你可以在不离开插入的情况下做到这一点 模式。你说你没有看到<c-o>的好处,但你会怎么做?

表达式寄存器插入表达式的结果。你不需要 例如,:call一个函数,如视频中所示。我会试着表现出来 另外两个我觉得有趣的用途,经常使用。

1.评估数学

表达式2的计算结果为2,对(就像在VimScript中一样)?所以你可以使用 表达式寄存器用于插入一些数字作为计算结果。对于 例如,考虑到您在此文件中处于插入模式:

... the total sum is $

现在点击<c-r>=并输入

5*6+3.2*8+5.52<enter>

结果是:

... the total sum is $61.12

实用,嗯?

2.使用变量值

假设您需要在文本中对标题进行编号。标题以#之类开头 在:

# Heading

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.

# Another Heading

Consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

考虑到这是一个很长的清单,你需要找到一种方法来快速完成。这是 一种方法:

  1. 创建一个变量来保存当前值
  2. 查找下一个标题
  3. 插入该变量的内容(使用表达式寄存器)
  4. 增加变量
  5. 这可以通过首先创建变量来完成:

    :let i=1
    

    然后用宏:

    qa            ; start recording
    /^#<CR>       ; find next heading
    0w            ; move to the first word
    i             ; switch to insert mode
    <c-r>=i<CR>   ; insert the number
    .<esc>        ; insert a dot and back to normal mode
    :let i+=1<CR> ; increment the variable
    q             ; stop recording
    

    现在您可以按@a并使用@@随后插入数字 你的标题。

答案 1 :(得分:9)

我使用表达式寄存器:<C-r>=618+27<CR>。这在做CSS时非常有用。