4.11. 技巧4——动作,重复,逆转
4.11 技巧4——动作,重复,逆转
当面对一个重复单调的任务时,通过使得动作和改变可重复化来达到优化编辑策略。 Vim 有这样的能力。它记住动作,将最常用的放在可及范围内,这样就能够轻松地重放它们。本技巧将介绍 Vim 能够重复的动作,以及怎样去逆转它们。
已经看到点命令重复最近的改变。因为许多操作被认为是一个改变,事实证明点命令用处很广泛,但是一些命令能通过其它的方法来重复。比如 @: 能用来重复任何的 Ex 命令(如技巧 31 重复最近的 Ex 命令 中所讨论的)。或者能按下 & 重复最近的 :substitute
命令,它本身恰好也是一个 Ex命令(见技巧93 重复之前的替换命令)。
如果知道如何不需要每次都拼写出动作,也可以重复它们的话,就能够更高效。首先运行动作,然后重复。
但是能够通过那么少的键击来完成当如此多的事情时,就不得不小心一点。因为很容易反应过激。不断地用力敲击 j.j.j. 感觉有点像在打鼓。 如果意外的在一行上按了两次 j 会发生什么呢?或者更糟的按的是. 键。
当 Vim 让重复动作变得容易时,它总是提供了一些撤销方法,以防我们意外地走得太远。在点命令这个例子中,我们总是可以按 u 键来撤销最近一次的改变。如果我们在使用 f{字符} 命令之后按了 ; 太多次,将错过(要查找的)符号,但是能够通过按 , 这个键来回退,它反方向的重复最近一次的 f{字符} 搜索(见技巧 50 找到通过字符查找)。
为防止步子迈得太大,知道回退档在哪里是有用的。表1 可重复的动作和如何逆转它们,总结了 Vim 可重复的命令以及它们对应的逆转动作。在大多数情况下,撤销命令是最常用的,难怪我键盘上的 u 键已经面目全非了。
表1—可重复的动作和如何逆转它们
意图 | 动作 | 重复 | 逆转 |
---|---|---|---|
做一个改变 | {编辑} | . | u |
在行上查找下一个字符 | f{字符}/t{字符} | ; | , |
在行上查找上一个字符 | F{字符}/T{字符} | ; | , |
在文档中进行下一次匹配 | /模式<CR> | n | N |
在文档中进行上一次匹配 | ?模式<CR> | n | N |
执行替换 | :s/目标/替换 | & | u |
执行一系列的改变 | qx{更改}q | @x | u |
qx 是创建一个名为 x 的宏, 而 @x 是执行名为 x 的宏。
关于宏的例子
qaI\donnee{<Esc>A}<Esc>jq
@a
上面例子就是先按 qa 创建了一个名为 a 的宏,进入录制状态:
接着按 I 移动到行首进入插入状态:
然后我们输入 \donnee{,按 <Esc> 返回正常模式
然后按 A 移动到行尾进入插入模式
并追加 },再按 <Esc> 返回正常模式。
然后按 j 跳到下一行
最后按 q 结束宏的录制。
然后就可以直接使用 @a ,给其它行添加上固定的代码标记了,提高不少效率!如下图: