Chang's blog
learn and share...
随手记录点vim技巧(四)
怎么快速删除每一行最后一个字符?(怎么录制宏?)

Q: 怎么快速删除每一行最后一个字符? (怎么录制宏?)

例如一个文件每一行最后一个字符是句号,需要把它们都去掉。

这是一个 ini 类型的配置文件,可以看到每一行的最前面有一个逗号,现在如果需要将每行前面的逗号去掉,怎么办? 如果是对一行进行操作,方法相当简单,$调到行尾,再按x删除一个字符,就完成了。 如果要对连续 100 行做这样修改呢?当然这每一行的长度是不一样的,用不了列编辑模式。

这时候需要用到 vim 里面的宏。

所谓宏,在 vim 里面是指某种特定顺序的一系列操作。vim 宏有录制和播放的过程,录制就是你教给 vim 该怎么操作,播放就是 vim 照着你教的进行自动操作。

  1. 把光标定位在要修改的第一行;

  2. 在 normal 模式下输入qa(这里的 a 是指寄存器名称,vim 会把录制好的宏放在这个寄存器中, 所以也可以是qb, qc, qd…)

    SpaceVim 重用了 q 键,需要输入\qr来进入录制模式。

  3. vim 的命令行会显示“recording @a”的提示,开始输入$调到行尾,再按 x 删除,按 j 跳到下一行;

  4. normal 模式下输入q,结束宏录制。

    SpaceVim 需要输入\qr来进入结束模式。

经过以上步骤, 我们定义了一个存储在寄存器 a 中的宏,它的操作序列是:$->x->j,也就是跳到行尾,删除,跳到下一行。

现在,第一行已经删除了行尾的句号,而且光标也已经在第二行。 这时候如果在 normal 模式下输入@a,就可以播放我们刚录制好的存在寄存器 a 中的宏,结果是第二行行尾的句号也被删除了,光标停在第三行。 当然不是输入 @a 99 次了,用 vim 的重复命令,输入 99@a 一并把剩下的 99 行都解决了。


Last modified on 2020-01-30