Vim常用命令小记(6)——撤销、重做和重复命令
撤销和重做命令
<Undo> 或 u 撤销 [count] 次更改。
:u[ndo] 撤销一次更改。
:u[ndo] {N} 转到改变号 {N} 之后。
CTRL-R 重做 [count] 次被撤销的更改。
:red[o] 重做一个被撤销的更改。
U 撤销最近对特定行所作的一系列更改。
单次重复
. 重复上次改变,有计数前缀的重复 [count] 次。
如果 'cpoptions' 包括 'y' 标志,也可以用来重复一个抽出操作。不能重复命令行命令。
简单的改变操作可以用 "." 重复。
如果没有数字前缀,使用上次的改变的重复次数。
如果输入一个重复次数,就用它取代上次的计数。
如果上次改变的操作使用数字编号的寄存器,则逐次递增使用寄存器的序号。
如果重复的命令涉及可视的选择区域,使用相同_大小_的区域。
@: 重复上次命令行 [count] 次。
多次重复
:[range]g[lobal]/{pattern}/[cmd] 在 [range] 界定的匹配模式 {pattern} 的文本行上执行 Ex 命令 (缺省是 ":p")。
:[range]g[lobal]!/{pattern}/[cmd] 在 [range] 界定的_不_匹配模式 {pattern} 的文本行上执行 Ex 命令 (缺省是 ":p")。
:[range]v[global]/{pattern}/[cmd] 等同于 :g!。
重复组合操作
q{0-9a-zA-Z"} 在寄存器 {0-9a-zA-Z"} 里记录键入的字符 (大写名字的寄存器表示附加键入的内容)。
'q' 命令不能在执行寄存器时使用。同样,在映射里也不能。
q 停止记录。(停止记录的 'q' 不会被保存在寄存器里,除非它是映射的结果)
@{0-9a-z".=*} 执行寄存器 {0-9a-z".=*} 的内容 [count] 次。
不能用寄存器 '%' (当前文件名) 和 '#' (轮换文件名) 。
"@=" 则会提示你输入一个表达式。这个表达式的结果会被执行。
@@ 执行上次执行的 @{0-9a-z":*} [count] 次。
:[addr]*{0-9a-z".=} 或 :[addr]@{0-9a-z".=*}
把寄存器 {0-9a-z".=*} 里的内容看成一个 Ex 命令执行。
首先,把光标放在 [addr] 行 (缺省是当前行) 上。
如果 'cpoptions' 设定了 'e' 标志位而寄存器的内容最后一行没有 <CR>,会自动加上。
":*" 命令只有在 'cpoptions' 设置 '*' 标志位时才会识别。如果用 'nocompatible',这并非缺省。
":@=" 使用最近使用的表达式。表达式执行的结果被当作 Ex 命令执行。
这些命令里,不识别映射。
:[addr]@: 先把光标放在 [addr] 行 (缺省是当前行) 上,然后重复上次的命令行。
:[addr]@@ 先把光标放在 [addr] 行 (缺省是当前行) 上,然后重复上次的 :@{0-9a-z"}。