分类: LINUX
2006-11-23 14:11:32
vi是在Unix工作站上广泛使用的功能强大的全屏幕编辑工具。
(1) 进入vi:
直接执行 vi编辑程序即可。此刻屏幕上会出现 vi 的编辑屏幕,同时 vi 会将文件复制一份至内存中的缓冲区(buffer)。vi会保留在硬盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。
(2) 离开vi:
若在输入模式下,则先利用[ESC]进入指令模式,而后即可选用下列指令离开vi。
:q! 离开vi,并放弃刚在缓冲区内编辑的内容。
:wq 将缓冲区内的资料写入硬盘中,并离开vi。
:ZZ 同wq。
:x 同wq。
:w 将缓冲区内的资料写入硬盘中,但并不离开vi。
:q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容。
(3) vi的操作模式:
vi提供两种操作模式:编辑模式(insert mode)和命令模式(command mode)。当使用者进入 vi 后,即处在命令模式下,此刻键入的任何字符都被视为指令。在此模式下可进行删除、修改等动作。若要输入资料,则需进入编辑模式。
编辑模式
如何进入编辑模式:
a(append) 由光标之后加入资料。
A 由该行之末加入资料。
i (insert)由光标之前加入资料。
I 由该行之首加入资料。
o(open) 新增一行于该行之下以供输入资料。
O 新增一行于该行之上以供输入资料。
如何离开编辑模式:
[ESC]结束编辑模式。
命令模式
光标的移动:
h 向左移一个字符。
j 向上移一个字符。
k 向下移一个字符。
l 向右移一个字符。
0 移至该行之首。
$ 移至该行之末。
^ 移至该行的第一个字符处。
H 移至屏幕的第一列。
M 移至屏幕的中间那列。
L 移至屏幕的最后一列。
G 移至该文件的最后一列。
+ 移至下一列的第一个字符处。
- 移至上一列的第一个字符处。
( 移至该句之首。
) 移至该句之末。
{ 移至该段落之首。
} 移至该段落之末。
nG 移至该文件的第n列。
n+ 移至光标所在位置之后的第n列。
n- 移至光标所在位置之前的第n列。
所在行号占总行号的百分比。
句子(sentence)在vi中是指以[!]、[.]或[?]结束的一串字。
段落(paragraph)在vi中是指以空白行隔开的文字。
屏幕的移动:
删除与修改:
x 删除光标所在处字符。
X 删除光标所在之前一字符。
dd 删除光标所在该行。
r 用接于此指令之后的字符取代光标所在字符。
R 进入取代状态,直到[ESC]为止。
s 删除光标所在的字符,并进入输入模式直到[ESC]。
S 删除光标所在的该行资料,并进入输入模式直到[ESC]。
移动与复制:
利用delete及put指令可完成资料移动的目的。
利用yank及put指令可完成资料复制的目的。
利用yank和delete可将指定的资料复制到内存缓冲区,而通过 put 指令可将缓冲区内的资料复制到屏幕上。
指令重复:
在命令模式中,可在指令前面加入一数字n,则此指令动作会重复执行n次。
取消前一动作(Undo):
u 恢复最后一个指令之前的结果。
U 恢复光标该行的所有改变。
查找:
在vi中可查找某一字符串,使光标移至该处。
/字符串 往光标之后寻找该字符串。
?字符串 字符串往光标之前寻找该字符串。
n 往下继续寻找下一个相同的字符串。
N 往上继续寻找下一个相同的字符串。
资料的连接:
J 句子的连接。将光标所在的下一行连接至光标该行的后面。
若某行资料太长亦可将其分成两行,只要将光标移至分开点,进入输入模式(可利用 a、i等指令)再按[Enter]即可。
环境的设定:
:set nu 设定资料的行号。
:set nonu 取消行号设定。
:set ai 自动内缩。
:set noai 取消自动内缩。
-300自动内缩(automatic indentation),在编辑文件或程序时,有时会遇到需要内缩的状况,“:set ai”即提供自动内缩的功能。
ex指令:
读写资料
:w 将缓冲区的资料写入硬盘中。
:10,20w test 将第10行至第20行的资料写入test文件。
:10,20w>>test 将第10行至第20行的资料加在test文件之后。
:r test 将test文件的资料读入编辑缓冲区的最后。
删除、复制及移动:
:10,20d 删除第10行至第20行的资料。
:10d 删除第10行的资料。
:%d 删除整个编辑缓冲区。
:10,20co30 将第10行至第20行的资料复制至第30行之后。
:10,20mo30 将第10行至第20行的资料移动至第30行之后。
字符串搜寻与取代:
s(substitute) 指令可查找某行列范围。
g(global)指令则可查找整个编辑缓冲区的资料。
s指令以第一个满足该条件的字符串为其取代的对象,若该行有数个满足该条件的字符串,也仅能取代第一个,若想取代所有的字符串则需加上g参数。
:1,$s/old/new/g 将文件中所有的“old”改成“new”。
:10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。
:%s/old/new/g 将编辑缓冲区中所有的“old”改成“new”。
恢复编辑时被中断的文件:
在编辑过程中,若系统宕掉或连线中断,而缓冲区的资料并还未被写回硬盘时,当再次回到系统,执行下列指令即可恢复中断前的文件内容。
%vi -r filename
编辑多个文件:
vi还提供同时编辑多个文件的功能,方法如下:
%vi file1 file2 ..
当第一个文件编辑完成后,可利用“:w”将该缓冲区存档,而后再利用 “:n”载入下一个文件。