可视模式在反复修改一段文本方面十分方便。你可以看见高亮的文本,从而确定是否改对
了地方。但选择文本也得打几个字。"gv" 命令再次选择上次选过的文本,让你对同一段
文本再作别的修改。
假定你有几行文本,你要把其中的 "2001" 改成 "2002",以及 "2000" 改成 "2001":
The financial results for 2001 are better than for 2000. The income increased by 50%, even though 2001 had more rain than 2000. 2000 2002 income 45,403 66,234
首先把 "2001" 改成 "2002"。在可视模式下选择这几行文本,并执行:
:s/2001/2002/g
现在用 "gv" 命令再次选择同一文本。光标在哪儿都没关系。然后用 ":s/2000/2001/g"
命令作第二项修改。
很明显,你可以多次重复这些动作。
当你反复地把一个数改成另一个时,你常遇到定值的偏移。在上例中,每个年份都加了
一。与其为每个要修改的年份都键入一个替换命令,不如利用 CTRL-A 命令。
在上面这段文本中搜索年份:
/19[0-9][0-9]\|20[0-9][0-9]
现在按 CTRL-A。找到的年份增加了一:
The financial results for 2002 are better than for 2000. The income increased by 50%, even though 2001 had more rain than 2000. 2000 2001 income 45,403 66,234
用 "n" 命令找到下一个年份,并按 "." 重复 CTRL-A 命令 (键入 "." 会快一点儿)。为
所有找到的年份重复 "n" 和 "."。
提示: 设定 'hlsearch' 选项以突显那些你要修改的数字,然后你可以提前观察并修
改得快些。
你可以在 CTRL-A 之前附加数字来增加一个大于一的数。假定你有这么个列表:
1. item four 2. item five 3. item six
把光标移到 "1." 上并键入:
3 CTRL-A
那个 "1." 就变成了 "4."。同样,你可以用 "." 命令对其它数字重复这项修改。
再看一个例子:
006 foo bar 007 foo bar
在这些数字上执行 CTRL-A 产生了以下结果:
007 foo bar 010 foo bar
7 加 1 等于 10?这是因为 Vim 根据首位出现的 "0" 而误以为 "007" 是个八进位数
字。这种表示法常用于 C 程序。如果你不要首位为 "0" 的数字被处理成八进位数字,请
用这个命令:
:set nrformats-=octalCTRL-X 命令用于减数字,用法与加数字类似。