vi序列号生成

时间:2012-12-05 23:31:15

标签: regex vi vim

我需要使用此模式在vi中创建一个文件。有没有办法使用第一行自动生成这些行

run 1 end
run 2 end
run 3 end
run 4 end
run 5 end
run 6 end

我总是可以在Excel中执行此操作,然后将其转换为文本文件,然后切换到vi,但想知道是否有办法在vi中执行此操作以便我不要必须切换回excel

3 个答案:

答案 0 :(得分:10)

:help ctrl-a

^ a增加光标下的数字,您可以在宏中使用它。对于您的情况,假设您有第一行并且光标位于其上:

qaYpw^aq4@a

应该做的伎俩。这是帮助页面中概述的技术,使用w修改以将光标向前移动到数字。打破它:

  • qa开始在注册a
  • 中录制宏
  • Y猛拉当前行
  • p将yank缓冲区放在当前位置下方并移至新行的第1列
  • w向前移动一个单词(到数字)
  • ^a增加数字
  • q停止录制宏
  • <count>@a应用宏&lt; count&gt;次

    另一种技术是使用外部工具。例如,如果您已经拥有该行并且光标位于其上:

    !!awk '1;{for(i=0;i<5;i++){$2+=1; print}}'
    
  • 答案 1 :(得分:3)

    :put!=map(range(1,6),'\"run \".v:val.\" end\"')

    答案 2 :(得分:2)

    威廉的回答非常好。我会发布另一个解决方案(它有点复杂),假设你已经有了第一行

    Y6P
    :let g:I=1
    :%g/\d/s/\d/\=g:I/|let g:I=g:I+1
    
    • 允许您分配变量
    • g运行全局命令
    • \ d匹配行
    • 中的数字
    • s代替
    • \ d是因为你要写一个数字
    • \ =是替换表达式(请参阅::help sub-replace-\=
    • g:我是我们在表达式中替换的变量,让增量变量g:I