一、Vi及其三种运行模式
1、Vi简介 Vi是Visual Interface的简称,它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。
2、Vi的三种运 行模式 Vi的三种基本工作模式:编辑模式、接入模式和命令模式(末行模式)。 在系统提示符后输入Vi和想要编辑(或建立)的文件 名,便可进入Vi。如果只输入Vi而不带文件名,也可进入Vi。然后输入所创建文件的内容。在退出Vi时,只需在退出命令后输入文件名即可。 进入Vi之后,首先进入的是编辑模式,进入编辑模式后Vi等待编辑命令输入而不是文本输入,也就是说这时输入的字母都将作为编辑命令来解释。 进入编辑模式后光标停在屏幕第一行首位上(用_表示),其余各行的行首均有一个“~”符号,表示该行为空行。最后一行是状态行,显示出当前正在编辑的文件 名及其状态。如果是[New File],则表示该文件是一个新建文件。如果输入Vi带文件名后,文件已在系统中存在,则在屏幕上显示出该文件的内容,并且光标停在第一行首位,在状态 行显示出该文件的文件名、行数和字符数。 在编辑模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替代命令s都可以进 入插入模式。在插入模式下,用户输入的任何字符都被Vi当作文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按Esc即 可。 在编辑模式下,用户按“:”键即可进入命令模式,此时Vi会在显示窗口的最后一行显示一个“:”,作为命令模式的提示符,等待用户输入命 令。末行命令执行完后,Vi自动回到编辑模式。
二、进入插入模式 在编辑模式下,输入以下命令均可进入插入模式。
类型
命令
说明
进入插入模式
i
从光标所在位置前开始插入文本
I
将光标移动到当前行行首,然后在其前插入文本
a
用于在光标当前所在位置之后追加新文本
A
将光标移动到所在行行尾,在那里插入新文本
o
在光标所在行的下面新开一行,并将光标置于行首,等待输入文本
O
在光标所在行的上面插入一行,并将光标置于行首,等待输入文本
三、编辑模式下的操作
类型
命令
说明
光标定位
G
将光标移动到文件最后一行
替换和删除
rc
用字符c替换光标所指向的渌前字符
nrc
用字符c替换光标所指向的前n个字符
x
删除光标处的字符
nx
删除从光标所在位置开始向右的n个字符
dw
删除一个单词。若光标个在某个单词中间,则从光标所在位置开始删至词尾并连同空格
ndw
删除n个指定的单词
db
删除光标所在位置之前的一个词
ndb
删除光标所在位置之前的n个词
dd
删除当前行
ndd
删除当前行及向后n-1行的内容
复制和粘贴
YY
将当前行的内容复制到缓冲区
nYY
将当前开始的n行内容复制到缓冲区
p
将缓冲区的内容写到光村所在位置
/str
往右移动到有str的地方
?str
往左移动到有str的地方
n
向相同的方向移动到有str的地方
N
向相反的方向移动到有str的地方
撤销和重复
u
取消前一次的误操作
.
再执行一次前面刚完成的某个复杂的命令
退出
ZZ
存盘退出
ZQ
不保存退出
四、命令行模式下的操作
类型
命令
说明
跳行
:n
跳到第n行
退出
:q
退出Vi
:wq
保存退出Vi
:q!
不保存退出Vi
文件相关
:w
将当前编辑的内容存盘
:w file
将当前编辑的内容写入到file文件中
:n1,n2w file
将从n1开始到n2结束的行写到file文件中
:nw file
将第n行写到file文件中
:1,.w file
将从第一行起到光标所在位置的所有内容写入到file文件中
:.,$w file
将从光标当前位置起到文件结尾的所有内容写入到file文件中
:r file
打开另一个文件file
:e file
新建另一个文件file
:f file
将当前文件改名为file文件
字符串搜索、替换、删除
:/str/
从当前光标开始往右移动到有str 的地方
str?
从当前光标开始往左移动到有str 的地方
:/str/w file
将包含有str的行写入到file文件中
:/str1/,/str2/w file
将从str1开始到str2结束的内容写入到file文件中
:s/str1/str2/
将第一个str1替换为str2
:s/str1/str2/g
将所有的str1替换为str2
:.,$ s/str1/str2/g
将从当前位置到结尾的所有str1替换为str2
文本的复制、移动和删除
:n1,n2 co n3
将从n1行到n2行的内容复制到n3后面
:n1,n2 m n3
将从n1行到n2行的内容移动到n3后面
:d
删除当前行
:nd
删除从当前行开始的n行
:n1,n2 d
删除从n1行开始到n2行结束的所有内容
:.,$ d
删除从当前行开始到结尾的所有内容
:/str1/,/str2/d
删除从str1开始到str2为止的所有内容
执行shell
命令
:!Cmd
运行shell命令cmd
n1,n2 w !Cmd
将n1到n2行的内容作为Cmd命令输入。如果不指定n1和n2,则将整个文件的内容作为命令Cmd的输入
:r !Cmd
将命令运行的结果写入当前行的位置