一键双雕——复合命令
很多Vim的单键命令都可以被看成两个或多个其他命令的组合。下面是类似的一些例子,它们有什么共同点呢?
| 复合命令 | 等效的长命令 |
|---|---|
| C | c$ |
| S | ^c |
| I | ^i |
| A | $a |
| o | A<CR> |
| O | ko |
| s | cl |
当我们输入ko命令时,想想自己在干嘛,然后要意识到我们可以把它换成O命令。
这些命令的共同点是,它们全都会从普通模式切换到插入模式。这会对.命令有怎样的影响??当我们足够熟练时,我们在执行一些常规的插入任务完全不用进行插入模式就可以用.命令快速重复之前操作。
s命令把两个操作合并为一个:它先删除光标下的字符,然后进入插入模式。f{char}命令让Vim查找下一处指定字符出现的位置,如果找到了,就把光标移到那里(参见:h f)。当我们输入f+时,光标会直接移到下一个+号所在的位置。使用;命令会重复查找上次f命令所查找的字符。这样可以实现快速的查找与替换。
执行、重复、回退
在面对重复性工作时,我们需要让移动动作和修改都能够重复,这样就达到了最佳的编辑模式。Vim会记住我们的操作,并使最常用的快捷键触手可及,以方便我们重复执行它们。
除了.命令,有些命令能以其他的方式重复。@:可以用来重复任意Ex命令;我们也可以输入&命令来重复上次的:substitute命令(它本身就是一条Ex命令)。
这样操作起来确实很爽,但是一不小心摁错或者多摁有可能导致很糟糕的情况。所以当我们不小心做过头时,知道回退会很有帮助。
可重复的操作及如何回退
| 目的 | 操作 | 重复 | 回退 |
|---|---|---|---|
| 做出一个修改 | {edit} | . |
u |
| 在行内查找下一个指定字符 | f{char}/t{char} |
; |
, |
| 在行内查找上一个指定字符 | F{char}/T{char} |
; |
, |
| 在文档中寻找下一处匹配项 | /pattern<CR>
|
n |
N |
| 在文档中寻找上一处匹配项 | ?pattern<CR>
|
n |
N |
| 执行替换 | :s/target/replacement | & |
u |
| 执行一系列修改 | qx{changes}q |
@x |
u |
