在 vi 里,输入跟编辑是两码事。编辑是在命令模式下操作的,先利用命令移动光标来定位要进行编辑的地方,然后才下命令做编辑。
命令 |
说明 |
备注 |
cc 或S |
修改一整行的文本 |
|
C |
改变一行中光标所在位置之后的部分 |
|
dd |
删除光标所在的列 |
|
D |
删除一行中光标所在位置之后的部分 |
|
dw |
删除光标所在的单词 |
|
J |
将下一行文本内容合并到本行行尾 |
|
r |
修改光标所在字符,r 后接要修正的字符 |
|
R |
修改本行内容 |
|
s |
修改光标所在字符 |
|
u |
恢复上一次所做的修改 |
|
x |
删除光标所在字符 |
|
X |
删除光标左侧字符 |
|
~ |
改变光标所在字符的大小写 |
|
. |
重复上一次的操作 |
|
<< |
将当前行移到左边 |
|
>> |
将当前行移到右边 |
|
p |
将缓冲区的内容拷贝到光标所在行的下一行 |
|
P |
将缓冲区的内容拷贝到光标所在行的上一行 |
|
“ad |
将文本删除至缓冲区a |
|
“ap |
粘贴缓冲区a中的内容 |
|
yy或Y |
将当前行存入缓冲区 |
|
yw |
将光标所在的单词存入缓冲区 |
|
0 |
移动到光标所在列的最前面 |
=[Home] |
$ |
移动到光标所在列的最后面 |
=[End] |
[CTRL+d] |
向下半页 |
=[PageDown] |
[CTRL+f] |
向下一页 |
|
[CTRL+u] |
向上半页 |
|
[CTRL+b] |
向上一页 |
=[PageUp] |
[CTRL+e] |
下滚一行 |
|
[CTRL+y] |
上滚一行 |
|
H |
移动到屏幕的第一行 |
|
M |
移动到屏幕的中间 |
|
L |
移动到屏幕的最后一行 |
|
b |
移动到上个小字的第一个字母 |
|
B |
移动到上个大字的第一个字母 |
|
w |
移动到下个小字的第一个字母 |
|
W |
移动到下个大字的第一个字母 |
|
e |
移动到下个小字的最后一个字母 |
|
E |
移动到下个大字的最后一个字母 |
|
^ |
移动到光标所在列的第一个非空白字符 |
|
n- |
减号移动到上一行的第一个非空白字符,前面加上数字可以指定移动到以上 n 行 |
|
n+ |
加号移动到下一行的第一个非空白字符,前面加上数字可以指定移动到以下 n 行 |
|
nG |
直接用数字 n 加上 G 移动到第 n 行 |
|
fx |
往右移动到 x 字符上 |
|
Fx |
往左移动到 x 字符上 |
|
tx |
往右移动到 x 字符前 |
|
Tx |
往左移动到 x 字符前 |
|
; |
配合 f&t 使用,重复一次 |
|
, |
配合 f&t 使用,反方向重复一次 |
|
/string |
往右移动到有 string 的地方 |
|
?string |
往左移动到有 string 的地方 |
|
n |
配合 /&? 使用,重复一次 |
|
N |
配合 /&? 使用,反方向重复一次 |
|
% |
移到匹配的”()”或”{}”上 |
|
n( |
左括号移动到句子的最前面,前面加上数字可以指定往前移动 n 个句子 |
句子是以! . ? 三种符号来界定 |
n) |
右括号移动到下个句子的最前面,前面加上数字可以指定往后移动 n 个句子 |
段落是以段落间的空白列界定 |
n{ |
左括弧移动到段落的最前面,前面加上数字可以指定往前移动 n 个段落 |
|
n} |
右括弧移动到下个段落的最前面,前面加上数字可以指定往后移动 n 个段落 |
|
这些编辑命令非常有弹性,基本上可以说是由命令与范围所构成。例如 dw 是由删除指令d 与范围 w 所组成,代表删除一个字 d (elete) w (ord) 。命令列表如下:
d 删除(delete)
y 复制(yank)
p 放置(put)
c 修改(change)
范围可以是下列几个:
e 光标所在位置到该字的最后一个字母
w 光标所在位置到下个字的第一个字母
b 光标所在位置到上个字的第一个字母
$ 光标所在位置到该行的最后一个字母
0 光标所在位置到该行的第一个字母
) 光标所在位置到下个句子的第一个字母
( 光标所在位置到该句子的第一个字母
} 光标所在位置到该段落的最后一个字母
{ 光标所在位置到该段落的第一个字母
:q 结束编辑(quit)
如果不想存档而要放弃编辑过的档案则用 :q! 强制离开。
:w 存档(write)
其后可加所要存档的档名。 可以将档案命令合在一起,例如 :wq 即存档后离开。
zz 功能与 :wq 相同。
:n 开始编辑vi激活的文件列表中的下一个文件。
:n filename 指定被编辑的新的文件。
:e filename 在vi中编辑另一个文件filename。
:e # 开始编辑另一个文件。
:e ! 重新装入当前文件,如果当前文件有改动,则丢弃以前的改动。
:r filename 将文件filename合并至当前文件的文件尾。
另外值得一提的是 vi 的部份存档功能。可以用 :n,m w filename 将第 n 行到第 m 行 的文字存放的所指定的 filename 里去。 |