使用可变值的Vim正常命令

使用可变值的Vim正常命令,vim,Vim,我需要做以下工作: 将变量temp设置为某个值(比如100) 去某个地方将一个数字增加一系列行的temp 将temp更新为+100 重复 我首先使用let temp=100将值100设置为temp 然后我计算出可以应用于行的以下ex命令::执行“normal!”。临时雇员“^A”这将取当前行的temp,并将该数字增加temp 不幸的是,当我直观地选择一系列行,然后点击:将命令应用于所有选中的行时,这将不起作用 除了一系列的产品线,我怎样才能达到同样的效果 以下是一个例子: 1 2 3 4 5

我需要做以下工作:

  • 将变量
    temp
    设置为某个值(比如100)
  • 去某个地方将一个数字增加一系列行的
    temp
  • temp
    更新为+100
  • 重复
我首先使用
let temp=100
将值100设置为temp

然后我计算出可以应用于行的以下ex命令:
:执行“normal!”。临时雇员“^A”
这将取当前行的temp,并将该数字增加
temp

不幸的是,当我直观地选择一系列行,然后点击
将命令应用于所有选中的行时,这将不起作用

除了一系列的产品线,我怎样才能达到同样的效果

以下是一个例子:

1
2
3
4
5
应该成为

101
102
103
104
105
然后,我将把temp更新为
let temp=temp+100
,并对下一个块进行重复,以此类推


谢谢

如果没有人知道更好的方法,我刚刚找到了一个解决办法


我录制了一个宏
b
来运行
执行“正常!”。临时雇员当前行上的“^A”
。然后录制另一个宏
a
,该宏将转到并以视觉方式选择感兴趣的组中的所有行,然后运行
:“直接回答您的问题,
:help:execute
是阻止您的原因,原因有两个:

  • :执行
    不接受范围
  • :开始时不需要执行
以下命令在不使用
的情况下执行作业:execute

:[range]normal! <C-r>=temp<CR><C-v><C-a><CR>
细分:

  • :帮助:xnoremap
    创建可视模式映射
  • :help
    使其成为表达式映射,实际RHS在运行时进行计算
  • 是您要按的键
  • temp''
    是表达式,它将
    temp
    的当前值与
    连接起来,以获得
    100
    200
用法:

  • temp
    设置为所需值:

    :let temp = 100
    
  • 选择一些行:

    v<motion>
    
    <motion>
    v<motion>
    
  • 移动到下一个块并选择一些线:

    v<motion>
    
    <motion>
    v<motion>
    
    
    v
    
  • 增加每行的第一个数字:

    <key>
    
    <key>
    
    
    

  • 但是,手动方式是这样的:

    v<motion>    " visually select the desired lines
    100<C-a>     " increment the first number on each line by 100
    
    v“目视选择所需的行
    100“每行的第一个数字增加100
    
    然后:

    
    v
    200“每行的第一个数字增加200
    

    等等…所以我不确定引入变量的好处是什么,
    :normal
    ,等等,在这里。

    我认为我们可以使用全局命令来做这项工作,它接受范围

    :'<,'>g/./execute "normal! ". temp. "^A"
    

    :“在这种情况下,您可以在视觉块模式下预先添加
    10
    。但我猜您也有>9的数字?是的,每组100个,至少有25个这样的组。@John,在这种情况下,您可能会发现我的答案很有趣,但一般来说。
    :'<,'>g/./execute "normal! ". temp. "^A"