摘要
Vi 是现存最早的全屏幕编辑器。对这个 UNIX® 程序,人们褒贬不一:虽然它复杂难学,但只要您习惯了就会发觉它是一个特别强大的工具。Vi 用户只要轻轻几按,就一切 OK,除了 Emacs,几乎没有哪个文本编辑器胆敢如此宣称。
Mandriva Linux 所包括的实际上是 Vim -- VI iMproved (增强版 Vi),不过在本章中我们还是称它为 Vi。
如果您想要进一步了解 Vi,请参阅 Vi 编辑器手把手教程或 Vi 主页。
$ vi file1 file2
您现在是在打开的第一个文件的最前面,并处于命令模式。在此模式下,您不能往文件中插入文本。要插入文本,您需要先切换到插入模式。
在插入模式中,您会在屏幕底部看到 -- 插入 --
字符串(提示您所处的模式)。只有在这个模式下您才能插入文本。按下 Esc
键就能返回命令模式。
在插入模式中,您可以使用 Backspace
和 DEL 键删除文本。方向键让您能够在命令模式和插入模式下在文本中移动。在命令模式下,要移动还有其他的按键组合,我们将在下文中提及。
在命令模式下按 : 键可以进入 ex 模式。此时,屏幕左下角光标前面会出现一个 :
。Vi 会把您在 Enter 前输入的任何东西当作一条 ex 命令。如果您删除了您输入的命令和 :,您将返回命令模式,且光标将返回到它在文本中原来的位置。
要在从命令行上输入的各个文件之间移动,键入 :next
就能移动到下一个文件,键入 :prev
就能移动到前一个文件。您也可以输入 :e <file_name>
,如果该文件已打开则将移动到该文件,否则则打开该文件。您也可以使用补全。
同 Emacs 一样,您可以在屏幕上同时显示多个缓冲区,只要输入 :split
命令。
键入 Ctrl-wj 移到下面的缓冲区,键入 Ctrl-wk 移到上面的缓冲区。您也可以用上下方向键替换 j 或 k。命令 :close
隐藏当前缓冲区,命令 :q
关闭当前缓冲区。
请注意,如果您要隐藏或关闭的缓冲区未曾保存修改,该命令不会执行,且 Vi 将提示:
编辑模式下,Vi 除了 Backspace 和 Del 键,还有很多其他命令用于删除、复制、粘贴和替换文本。以下对命令的讨论分成两个部分:要执行的动作及其作用域。动作有:
h、j、k、l:分别表示左、下、上、右边一个字符。[20]
/<字符串>
, ?<字符串>
:找到下一个或前一个字符串或正则表达式 <字符串>
处。例如,/foobar
将光标移动到下一个单词 foobar
处。
上述每个“作用域”字符或移动命令都可以前缀重复次数。对于 G (原意为移至文件末尾),前缀表示要移动到文件中的行号。由此,您可以使用各种组合。
在 Vi 中复制命令我们已经在上文中看到过了:y 命令。要剪切,只要用 d 命令。一共有 27 个剪切板位置可以保存剪切的文本:其中一个为匿名,另外 26 个以 26 个英语小写字符命名。
要使用匿名剪贴板,您只要“按原样”输入命令。因此,y12w
命令将把光标后的 12 个单词复制到匿名剪贴板[21]。如果您想要剪切的话,只要输入 d12w
。
要使用 26 个命名剪贴板之一,请在命令之前输入 "<x>
,其中 <x>
给出您想使用的剪贴板的名字。因此,要将上述 12 个单词复制到剪贴板 k
,请输入 "ky12w
。要剪切,请输入 "kd12w
。
要粘贴匿名剪贴板中的内容,请使用 p
或 P
命令(意为粘贴(Paste))将其分别插入到光标之后或之前。要粘贴命名粘贴板中的内容,请用 "<x>p
或 "<x>P
(例如,"dp
将把剪贴板 d
中的内容粘贴到光标之后)。
复制该句话的前 6 个单词到剪贴板 r
:"ry6w
[22];
我们就得到了需要的结果,如图 8.6 “VIM,复制了文本块之后”所示。
查找文本非常简单:在命令模式,您只要键入 / 接着输入想要查找的字符串,并按 Enter 键。例如:/party
会从当前光标所在位置寻找字符串 party
。按下 n 将移至下一个匹配处,到达文件末尾后会重新从开头找起。要向前寻找,请用 ? 代替 /。