一键双雕——复合命令
很多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 |