elvis
elvis 没什么好说的,反正是靠 XA+CV 来显示及输入中文。至于其他外观调整,就请 man elvis。
勤前教育
VIM 的模式可有六种,为免初学的人搞混,仍依一般的分类分成三种:
Normal mode(common mode,以下简称 c-mode):
您一进入 VIM 就是处于 c-mode,只能下按键指令,不能输入文字。这些指令可能是游标移动的指令,也可能是编辑指令或寻找替换指令。
Insert mode(i-mode):
按 i 就会进入 i-mode,此时才可以键入文字,写您的文章,按 Esc 又会回到 c-mode。
Ed mode(common-line mode,e-mode):
按冒号:(别忘了 Shift 键)就会进入 e-mode,左下角会有一个冒号:出现可下 ed 指令。也是按 Esc 回 c-mode。反正正常状态都是处于 c-mode,这样才不会把您辛苦打字的文章给随便搞乱掉。
ed 是一个很古老的行编辑器,就好像 DOS 下的 edline 一样,vi,sed 这些编辑器都是从 ed 衍化而来的。有兴趣可 man ed 学看看有些时候会只有 ed 可以用(当机救助的时候)。
其它的模式就碰到时再说明了!
基本教练:step by step
由命令列来开档:
vim test.txt 或 gvim test,txt 或 gvim-chinese test.txt 如果您的系统 vi 是 vim 的连结档话,就可以直接用 vi test.txt。以下就直接用 vim 代表 vi,gvim,因操作是一样的。
进入 vim 后,按 i 进入 i-mode,就可以编写您的文件了。在 vim 游标的移动可以由方向键来移动。Backspace 键可消去前一个字元,中文的话是一个中文字。Del 键可删除游标所在处的字元(中文字)。
原始 vi 是不能在 i-mode 随意移动游标的,得进入 c-mode 才能移动,因此就常常要按 Esc 来变换模式。vim 及 elvis 都打破了这个规矩。
如果您写好您的文件,就可以按 Esc 回到 c-mode,然后 :w 就会存档(注意,是冒号命令),但还不会离开 vim,要离开可按 :q,就可以了!也可以合起来用,:wq,就样就会存档后离开。怎么样,也不会很难吧!只不过操作方式和别的编辑器不一样罢了,这样岂不是很有个性。:-)
尽量记住按键的意义,才不必死背,如 e 是 edit(编辑), w 是 write(写入),q 是 quit(停止、离开)。
好了,这是就编辑的整个过程。下回开始是详述各部份的功能,把 vim 解剖开来讲,您可以马上现学现卖。由于 vi(m) 的操作方式很有个性,因此,用了一次就会记住有这么一个功能,想忘也忘不了,但有时按键难免会忘记,但有这一种功能大概是忘不了的,查了几次指令就可以记得住了。
游标的移动
本节所述皆是在 common-mode(c-mode,在 vim 又名 normal-mode)下的移动,原始的 vi 只能在 c-mode 移动,在 insert-mode 只做文字的输入,而不做游标的移动。当然 vim 及 elvis 的方向键是不论在那一种 mode 皆可移动自如。
基本的游标移动
h 左,或 Backspace 或方向键
j 下,或 Enter 或 +(要 Shift 键),或方向键
k 上,或 方向键或 -(不必 Shift 键)
l 右,或 Space 或方向键
Ctrl-f 即 PageDown 翻页。
Crtl-b 即 PageUp 翻页。
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。
特殊的移动
r 取代游标所在处之字元。vi(m) 很有个性的,您在 c-mode 按了 r 她就会停在那里等主人键入所要替代的字元,希望您这个当主人的,不要傻呼呼的也楞在那里,赶快键入您的新字元吧!:-)
vim 中可用于中文字,也就是可以替换一个中文字,elvis 则不行。
当然您的 vim 是要设在 taiwan 的才行。怎么样!有没有看过如此
有个性的取代方式?ㄚ!r 就是 replace 啦!
R 取代字元至按 Esc 为止。
cc 取代整行内容。或大写 S 亦可。
cw 替换一个英文字(word),中文不适用。(change)
~ 游标所在处之大小写互换。当然不能用于中文。别忘了 Shift!
C 取代至行尾,即游标所在处以后的字都会被替换。或 c$。
c0 取代至行首,或 c^。
s 替换一个字元为您所输入的字串。和 R 不同,R 是覆盖式的取代,s 则是插入式的取代,您可亲自实验看看。ㄟ!是小写的 s。
u 这个太重要了,就是 undo,传统的 vi 仅支援一次 undo,vim 及 elvis 就不只了,vim 是没有限制的。
U 在游标没离开本行之前,回复所有编辑动作。
Crtl+r 这个也是很重要,就是 redo 键。
加上数目字
喔!骚到 vi(m) 的痒处了,这是 vi(m) 一个非常骚包的功能,只此一家别无分号(当然同源的 ed,sed 等不在此限)。就是您可以在大部份的指令前加上数目字,代表要处理几次的意思。以下用实例来说明比较清楚。
yy 复制游标所在行整行。或大写一个 Y。
2yy 或 y2y 复制两行。ㄟ,请举一反三好不好!:-)
y^ 复制至行首,或 y0。不含游标所在处字元。
y$ 复制至行尾。含游标所在处字元。
yw 复制一个 word。
y2w 复制两个字。
yG 复制至档尾。
y1G 复制至档首。
p 小写 p 代表贴至游标后(下)。
P 大写 P 代表贴至游标前(上)。
整行的复制,按 p 或 P 时是插入式的贴在下(上)一行。
非整行的复制则是贴在游标所在处之后(前)。
"ayy 将本行文字复制到 a 缓冲区
a 可为 26 个英文字母中的一个,如果是小写的话,原先的
内容会被清掉,如果是大写的话是 append 的作用,会把内
容附加到原先内容之后。
" 是 Enter 键隔壁的那一个同上符号(ditto marks)。
"ap 将 a 缓冲区的内容贴上。
缓冲区的术语在 vim 称为 registers,vim 扩充了相当多的
功能,有兴趣深入的朋友请 :h registers。您用 d、c、s、
x、y 等指令改变或删除的内容都是放在 registers 中的。
例如:您用 dd 删除的一行,也是可以使用 p 来贴上的。只
要是在缓冲区的内容都可以使用 p 来贴上,不是一定要 y 起
来的内容才能用 p。因此您认为 p 是 paste 也可以,认为是
put 可能较正确。
5"ayy 复制五行内容至 a 缓冲区。
5"Ayy 再复制五行附在 a 内容之后,现在 a 中有十行内容了!
ㄟ!不要我一直用 a 您就认为只有 a 可以用喔。26 个英文
字母都可以的,交叉运用下,您会发觉 vi(m) 肚量不小。
v 小写 v 这是属于字元标示(character visual),按下 v 后您就可以移动游标,游标走过的地方就会标示起来。再按一次 v 就会结束 v-mode。您用 mouse 拉出的标示区也是属于这类的标示。
V 大写 V 这是行标示(line visual),按下 V 后会整行标示起来(包括空白的部分),您移动上下键,会标示多行。mouse 连按三次左钮,也是属于此类的标示。再按一次 V 就会结束 v-mode。
mouse 按两次左钮是标示一个 word。