4

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

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

我总是可以在 excel 中执行此操作,然后将其转换为文本文件,然后切换到vi,但想知道是否有办法做到这一点,vi这样我就不必切换回 excel

4

3 回答 3

10

:help ctrl-a

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

qaYpw^aq4@a

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

  • qa开始在寄存器中录制宏a
  • Y拉出当前行
  • p将 yank 缓冲区放在当前位置下方并移动到新行的第 1 列
  • w前进一个字(到数字)
  • ^a增加数字
  • q停止录制宏
  • <count>@a应用宏 <count> 次

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

    !!awk '1;{for(i=0;i<5;i++){$2+=1; print}}'
    
  • 于 2012-12-05T23:52:04.040 回答
    3

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

    于 2012-12-06T03:06:52.503 回答
    2

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

    Y6P
    :let g:I=1
    :%g/\d/s/\d/\=g:I/|let g:I=g:I+1
    
    • let 允许您分配变量
    • g 运行一个全局命令
    • \d 匹配行中的数字
    • s 是替代品
    • \d 是因为你要写一个数字
    • \= 是替换表达式(见:help sub-replace-\=:)
    • g:I 是我们在表达式中替换的变量,让变量 g:I 递增
    于 2012-12-06T00:49:45.570 回答