传统的 vi 指令,不支持多重窗口编辑。所以无法用一只 vi 程序同时开启两个档案做数据交换、转移的编辑。但这点并没有太大的不便,因为替代的方法也很简单。只要善用 vi 程序的具名缓冲区,先将 A 档案的数据暂存起来,然后继续编辑 B 档案,再呼叫出来即可。
对 vi 程序的运作而言,使用 d (delete) 与 y (yank) 都会将数据放入具名的 buffer 中。但对本文的需求来说,我自己绝对不会选择 delete 来做,虽然做得到,但太危险。所以唯一正确的选择是使用 yank。它支持小写字母 a ~ z 命名的具名缓冲区供使用者运作。现在仔细想想,似乎我从不曾嫌过 26 个不够用,它她毕竟是一个相当有限的限制。
接下来是我实际运作的例子。每天系统的 message 档案,总会有一些异常的信息。这些讯息虽多半具有规律性,但仍然会有无法掌握的情况出现。由于我的系统服务非常单纯,所以我习惯使用 vi 查看每天发生的事情。检查的过程中如果有异样或自己搞不清楚的警报,我就先将它存入具名缓冲区中,等到全部检查完毕后,再决定如何处理。
现在,假设我要开始检查 messages 档案中有关于 12 月 24 日的纪录;
# vi +/"Dec 24" messages
光标会停在我要的第一笔资料上。我往下检查当天纪录,不久发现连续三行资料有异样,我把光标停在第一行的位置,下指令先将她们放入具名缓冲区中;
"q3yy
如此,三行数据就会存入 q 缓冲区内。再往下检查,又发现零散的几行异常都与某 IP 有关。因此我将 IP 的数据。一样我先将光标停在该 IP 的开头位置,然后再下指令;
"w8yw
该行的意思是存 8 个"字"(word)存到 w 缓冲区内。xxx.xxx.xxx.xxx 是 IP 的固定格式,其中的 dot 在定义上是特殊符号,视同一个"字"(word),所以像 IP 这样的格式在表示上用 8 个"字"(word)。