Vi 输入模式
要如何输入资料呢?有好几个指令可以进入输入模式:
插入 (insert)i 从游标所在位置前面开始插入资料,游标後的资料随新增资料向後移动。I 从游标所在列的第一个非空白字元前面开始插入资料。
新增 (append)a 从游标所在位置後面开始新增资料,游标後的资料随新增资料向後移动。A 从游标所在列最後面的地方开始新增资料。
开始 (open)o 在游标所在列下新增一列并进入输入模式。O 在游标所在列上方新增一列并进入输入模式。
删除与修改
何谓编辑?在这里我们认为是文字的新增修改以及删除,甚至包括文字区块的搬移、复制等等。这里先介绍 vi 的如何做删除与修改。(注意:在 vi 的原始观念里,输入跟编辑是两码子事。编辑是在指令模式下操作的,先利用指令移动游标来定位要进行编辑的地方,然後才下指令做编辑。)
x 删除游标所在字元。
dd 删除游标所在的列。
r 修改游标所在字元,r 後接著要修正的字元。R 进入取代状态,新增资料会覆盖原先资料,直到按 [ESC] 回到指令模式下为止。
s 删除游标所在字元,并进入输入模式。S 删除游标所在的列,并进入输入模式。
其实呢,在 PC 上根本没有这麽麻烦!输入跟编辑都可以在输入模式下完成。例如要删除字元,直接按 [Delete] 不就得了。而插入状态与取代状态可以直接用 [Insert] 切换,犯不著用什麽指令模式的编辑指令。不过就如前面所提到的,这些指令几乎是每台终端机都能用,而不是仅仅在 PC 上。
在指令模式下移动游标的基本指令是 h, j, k, l .想来各位现在也应该能猜到只要直接用 PC 的方向键就可以了,而且无论在指令模式或输入模式下都可以。多容易不是。
当然 PC 键盘也有不足之处。有个很好用的指令 u 可以恢复被删除的资料,而 U 指令则可以恢复游标所在列的所有改变。这与某些电脑上的 [Undo] 按键功能相同。
移动游标
由於许多编辑工作是藉由游标来定位,所以 vi 提供许多移动游标的方式:
h 左,或 Backspace 或方向键。
j 下,或 Enter 或 +(要 Shift 键),或方向键。
k 上,或 方向鍵或 -(不必 Shift 键)。
l 右,或 Space 或方向鍵。
Ctrl+f 即 PageDown 翻页(Forward,向前、下翻页)。
Crtl+b 即 PageUp 翻页(Backward,向後、上翻页)。
使用 hjkl 键盘的移动是为了使手不必离开打字区(键盘中央的部位),以加快打字的速度,如果各位不习惯,那就使用方向键吧!其实,一旦习惯了以后,对於编辑工作的效率会有狠大的帮助,而且有许多工作站的 vi 只能使用 hjkl 的移动方式,因此可能的话,尽量熟悉 hjkl 的游标移动。
Backspace 及 Space 的移动方式是到了行首或行尾时会折行,但方向键或 hl 键的移动则在行首或行尾时您继续按也不会折行。转折换行的功能是 Vim 的扩充功能,elvis 无此功能。
jk 及使用方向键的上下移动游标会尽量保持在同一栏位。使用 Enter,+,-的上下移动,游标会移至上(下)一行的第一个非空白字元处。
0 是数目字 0 而不是英文字母 o。或是 Home 键,移至行首,(含空白字元)。
^ 移至行首第一个非空白字元,注意,要 Shift 键。
$ 移至行尾,或 End 键。要 Shift 键。
G 移至档尾(全文最后一行的第一个非空白字元处)
gg 移至档首(全文第一行之第一个非空白字元处)。
在规则表示式(regular expression)中,^ 是匹配行首,$ 是匹配行尾。
gg 是 Vim 的扩充功能,在 elvis 或原始 vi 中可用 1G 来移至档首(是数字 1 不是英文字 l)。G 之原意是 goto,指移至指定数目行之行首,如不指定数目,则预设是最后一行。
w 移至次一个字(word)字首。当然是指英文单字。
W 同上,但会忽略一些标点符号。
e 移至后一个字字尾。
E 同上,但会忽略一些标点符号。
b 移至前一个字字首。
B 同上,但会忽略一些标点符号。
H 移至萤幕顶第一个非空白字元。
M 移至萤幕中间第一个非空白字元。
L 移至萤幕底第一个非空白字元。这和 PageDown,PageUp 不一样,内文内容并未动,只是游标在动而已。
n| 移至第 n 个字元(栏)处。注意,要用 Shift 键。n 是从头起算的。
:n 移至第 n 行行首。或 nG。
) 移至下一个句子(sentence)首。
( 移至上一个句子(sentence)首。sentence(句子)是以 . ! ? 為区格。
} 移至下一个段落(paragraph)首。
{ 移至上一个段落(paragraph)首。paragraph(段落)是以空白行為区格。
% 这是匹配 {},[],() 用的,例如游标在 { 上只要按 %,就会跑到相匹配的 } 上。
另还有一些 Vim 的特殊按键,但这得留待最后再来说明,否则各位恐怕会头昏眼花了。
档案指令
档案指令多以 : 开头,跟编辑指令有点区别。例如前面提到结束编辑的指令就是 :q.现在就简单说明一下作为本篇故事的结尾:
:q 结束编辑(quit)如果不想存档而要放弃编辑过的档案则用 :q! 强制离开。
:w 存档(write)其後可加所要存档的档名。可以将档案指令合在一起,例如 :wq 即存档後离开。zz 功能与 :wq 相同。