Vim批量插入数字序列

1、需求

有如下文本,现在对该文本添加行号:

apple inc, macbook pro
apple inc, macbook pro
apple inc, macbook pro
apple inc, macbook pro
apple inc, macbook pro
apple inc, macbook pro
apple inc, macbook pro

也就是最终达到如下效果:

1 apple inc, macbook pro
2 apple inc, macbook pro
3 apple inc, macbook pro
4 apple inc, macbook pro
5 apple inc, macbook pro
6 apple inc, macbook pro
7 apple inc, macbook pro

这里要实现的就是在Vim中批量填入序列。

2、思路和难点

这种自增操作肯定是要用到变量累加,这十分容易:let i=i+1即可。接下来的难点是如何将变量的值插入到Vim中,这里有两种方法:

  • Ctrl+R方法

    在Vim中,通过Ctrl+R可以很方便地将一个寄存器的值插入到Vim中。同样的,通过它也可以将一个变量的值插入到Vim中:在insert模式下,按下Ctrl+R,按下=变量名,回车即可。

  • 寄存器方法

    通过执行:let @a=i,可以将变量i的值赋给寄存器a,这样,通过"ap就可以将变量的值粘贴到Vim中了。

3、具体操作

具体操作的整个流程肯定是通过Vim的宏来串联起来的,下面逐一介绍。

3.1 Ctrl+R方法

首先执行:let i=1,给Vim变量i赋初值1。然后,就可以开始录制宏(qn)了。这个宏包含如下步骤:

  • 移动到行首,然后切换到insert模式。
  • 利用Ctrl+R插入变量i的值作为行号,同时插入空格作为行号和内容之间的分隔。
  • 切换到normal模式
  • 移动光标到下一行
  • 执行:let i=i+1让变量的值自增
  • q结束宏录制

录制完宏之后,可以通过@n来执行该宏,也可以在前面加执行次数,如5@n来连续执行该宏。
通过"np,可以查看该宏的完整内容:

屏幕快照 2017-01-06 下午11.53.43.png

3.2 寄存器方法

寄存器的方法类似,只有插入行号变量的部分不同。

首先执行:let i=1,给Vim变量i赋初值1。然后,就可以开始录制宏(qn)了。这个宏包含如下步骤:

  • 移动到行首。
  • 执行:let @a=i将变量i的值赋给寄存器a。
  • 利用"aP插入寄存器a的内容作为行号
  • 插入空格作为行号和内容之间的分隔。
  • 切换到normal模式
  • 移动光标到下一行
  • 执行:let i=i+1让变量的值自增
  • q结束宏录制

录制完宏之后,可以通过@n来执行该宏,也可以在前面加执行次数,如5@n来连续执行该宏。
通过"np,可以查看该宏的完整内容:

屏幕快照 2017-01-06 下午11.54.55.png

4、结

希望对大家有帮助。

推荐阅读更多精彩内容

  • 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim 在命令...
    im蚂蚁阅读 29,787评论 3 48
  • 在IDEA Intellij小技巧和插件一文中简单介绍了一下IdeaVim插件。在这里详细总结一下这个插件在日常编...
    BakerZhang阅读 3,954评论 0 9
  • 在 IDEA Intellij小技巧和插件 一文中简单介绍了一下IdeaVim插件。在这里详细总结一下这个插件在日...
    司马子临阅读 3,077评论 0 0
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 91,742评论 9 468
  • ​01 小时候,爸妈总是跟我说,不要动不动就乱发脾气。 那时候不理解,完全由着性子来。而现在渐渐明白,不乱发脾气真...
    进击的历史君阅读 818评论 1 4
  • 一骑良将徒蛮勇 怎负智谋两尽空 夕月横刀沙场上 今时握笔草堂中 若无玉冕言警句 何有白衣过江东 士别三日刮目看 不...
    小白坏坏阅读 90评论 0 1
  • 微风扶月依杨柳,工体走圈悠然哉;谁料雹雨来伴舞,雷滚电闪成落汤。
    小陌海蒂阅读 150评论 2 2