⒈ 进入vi:
要使用vi,应先注册进入一用户,然后如下所示进行操作:
$ vi <filename> <Enter> ($ 为提示符)
⒉ 退出vi:
(1) "Esc" 退出插入方式进入命令方式
:w <Enter> 将文件存盘
:q <Enter> 退出vi
(2) "Esc" 退出插入方式进入命令方式
:q! <Enter> 无条件退出vi,修改内容不存盘
(3) "Esc" 退出插入方式进入命令方式
:x <Enter> 将文件存盘并退出vi
⒊ 临时退出vi:
(1) "Esc" 退出插入方式进入命令方式
:!command <Enter> 执行命令command
命令执行完成后,按<Enter>返回编辑画面。
(2) "Esc" 退出插入方式进入命令方式
:!sh <Enter> 进入子shell
进入子shell后出现$提示符,按Ctrl_d退出子shell,再按<Enter>返回编辑画面。
(3) "Esc" 退出插入方式进入命令方式
!!command <Enter> 执行命令command的结果代替当前行
【注】 前面没有“∶”,当前行原来的内容消失,代之以命令执行的结果。
⒋ 移动光标及屏幕命令:
(1) 移动一个字符的位置
--------------------------------------------------------
h 左 也可一次移动n个字符,如5h,就向左
l 右 移动5个字符的位置。
--------------------------------------------------------
(2) 移动一行的位置
--------------------------------------------------------
j 下 也可一次移动n个字符,如5j,就向下
k 上 移动5行。
nG 移到第n行
:n <Enter> 移到第n行
--------------------------------------------------------
(3) 移动一个字的位置
--------------------------------------------------------
W或w 右移一字 (光标 ①小写字母键把标点及非字母符号
定位在字首) (例如,!@#$%^&* ()_-=+等)也看作
E或e 右移一字 (光标 一个词;
定位在字尾) ②大写字母以空格为字的分界符;
B或b 左移一字 (光标 ③前面加数字n将移动n个字的位置;
定位在字首) ④从行尾右移则移向下一行的行首,
从行首左移则移向上一行的行尾。
--------------------------------------------------------
(4) 移动一句的位置
--------------------------------------------------------
( 移至句首 以.?!后加两个空格或换行符的字
) 移至句尾 符序列定义为句子。
n ( 执行n次 (
n) 执行n次)
--------------------------------------------------------
(5) 屏幕滚动
--------------------------------------------------------
Ctrl_u 上滚半屏 大写字母与小写字母等价
Ctrl_d 下滚半屏
Ctrl_f 下滚一屏
Ctrl_b 上滚一屏
--------------------------------------------------------
(6) 其他常用命令
--------------------------------------------------------
0 行首 ①这些命令都在命令方式下
^ 移到行首第一个可 使用;
见字符处 ②H、L、G、M都必须是大写
$ 行尾 字母;
Ctrl_G 显示当前行行号 ③z是小写字母,且按回车才
Ctrl_L 屏幕重显 有效。
H 屏幕左上角
L 屏幕正文最低行
G 文件最末行
M 屏幕中间行
z<Enter> 当前行翻到屏幕顶
nz<Enter> 第n行翻到屏幕顶
--------------------------------------------------------
⒌ 插入命令
--------------------------------------------------------
I 当前行的行首前插入 ①按"Esc"就退出插入方式
A 当前行的行尾附加 ②大小写字母作用不同
i 光标前插入
a 光标后插入
O 当前行前开新行
o 当前行后开新行
>> 当前行整个右移一个制表符的位置
<< 当前行整个左移一个制表符的位置
--------------------------------------------------------
⒍ 删除命令
--------------------------------------------------------
dd 删除当前行,并将删 ①在命令dd,dw,x,X前加数
除的内容存入缓冲区
dw 删除一个词 (光标到词 字n等于命令执行n次
尾部分) ②Ctrl_u 要在插入方式下
x 删除光标所在字符, 使用,按下ESC键后生效
并将删除的内容存入缓
冲区
X 删除光标之前字符,
并将删除的内容存入缓
冲区
D,d$ 删除光标至行尾的内容
d0 删除光标至行首的内容
d^ 删除光标至行首第一个
可见字符的内容
Ctrl_u 删除刚插入的所有内容
--------------------------------------------------------
要删除刚插入的内容,应在没按ESC键(插入状态下)时按下
Ctrl_u键。光标回到插入的开始处,原有插入的正文仍显示在屏
幕上,它将被键入的新内容所代替。当按下ESC键后,原插入
的正文将被删除。下面是几个删除的例子:
3x 删除光标后三个字符
3X 删除光标前三个字符
2dd 删除当前行和下面的一行共两行
:15,20d 删除第15到20行
:.,$d 删除当前行到最后一行。"."代表当前行,$代
表最后一行。
:.,+3d 删除当前行和下面的三行
:.,-3d 删除当前行和上面的三行
⒎ 恢复
按下ESC键 进入命令方式
按下u 恢复到上一命令以前的状态
再按下u 恢复到上一个u以前的状态
⒏ 重复一条命令
任何一条编辑命令执行一次后,如果还需要再执行同样的命令,应该用重复命令“.”
来节省时间,例如在一行中连续插入三个字符串abcdef,那么可以用如下的方法:
键入i 进入插入方式
键入abcdef 插入第一个字符串
按下ESC键 进入命令方式
光标移到正确
的位置,连续
按两个园点. 重复插入两个字符串abcdef
⒐ 搜索命令
(1)模式匹配特殊字
--------------------------------------------------------
^ 一行的开始
$ 一行的末尾,或文件的最后一行
. 任一字符 (除换行符外)
[ ] 字符集内的任一字符,如[abc]代表a,b,c中的任一
字符,[1-5]代表1,2,3,4,5中的任一个。
[^ ] 字符集外的任一字符,如[^abc]代表除a,b,c外的任
一字符
\ 转义,去掉特殊字符的特殊意义,如\$仅代表$字
符本身
--------------------------------------------------------
(2)常用搜索命令
--------------------------------------------------------
/串 <Enter> 向下搜索
?串 <Enter> 向上搜索
n 继续搜索
N 继续向相反方向搜索
--------------------------------------------------------
搜索命令必须在命令方式下使用。按下"/"或"?"时它会自动出现在状态行上,键入要搜
索的字符串并按回车,光标会移动到该字符串所在行,并定位在该字符串的第一个字符上。
下面的格式把光标移到字符上一行的行首:
/字符串/- <Enter>
下面是一些例子:
/abc/-2 <Enter> 光标移到含abc的行的上两行的行首
/abc/+2 <Enter> 光标移到含abc的行的下两行的行首
?123mn <Enter> 向上搜索串123mn
n 继续执行前面的搜索命令
/^this<Enter> 搜索开头为this的行
/p\.r\.c<Enter> 向下搜索字符串p.r.c,因为"."是特殊字符,所
以前面要加反斜线"\"转义。
⒑ 作标记
在光标所在处作一标记,以备需要时及时查找到该处,这也是一种重要的检索方式,完
成该功能的命令是m。
标记命令
--------------------------------------------------------
m标记 光标所在处作标记 ①标记是任选的小写字母
`标记 移到标记位置 ②注意左撇 ' 与右撇 `
'标记 移到有标记的行的开头 的不同
--------------------------------------------------------
例如有一正文前三行内容如下:
1 This is Line one
2
3 This is Line two
把光标移到第一行的L处,键入 mb,作标记b (不要回车),以后某一时候要删除从当前
光标处到标记处,只要键入: d`b 即可。
如果再把光标移到第三行的"n"处,再作一标记s,只要键入: ms即可。如果光标在别的
地方,什么时候想把光标移到第三行的"n"处,只要键入: `s 即可。如果仅是想把光标移到
第三行,只要键入: 's 即可。
⒒ 搜索并代替
对文件进行更复杂的修改,最好用搜索替代合在一起的命令。这类命令往往是一些简单
命令的组合。
搜索替代命令
--------------------------------------------------------
g 全局搜索 用于开头,代表搜索所有行,用于末
尾,代表搜索整行。
s 替代命令 如果出现在命令行中,应与其他命令
用"/"隔开。
p 显示命令
c 提问命令 对要替代的内容用符号"^"提示,若按
下"y"才发生替换,否则不替换。
v 不匹配命令
--------------------------------------------------------
搜索替代命令是在ex转换方式下使用的,即按下"ESC"键和":"之后才能使用。键入的命
令出现在状态行上,按回车执行。被搜索替代的字符串两边要加斜线"/", 如果不使用全局
命令"g",则只对第一个找到的字符串起作用。命令前面也可以加地址范围的选择。
下面是使用命令的例子:
:s/abc/xyz/<Enter> 用xyz替换当前行找到的第一个abc
:s/ab/x/g<Enter> 用x替换当前行所有的ab
:g/22/s//456/<Enter> 每行找到的第一个字符串"22"都用
字符串"456"替换
:g/22/s//456/g<Enter> 全文找到的所有字符串"22"都用串
"456"替换,第一个"g"代表"每行",
第二个"g"代表一行中的全部。
:g/this/p<Enter> 显示所有含"this"的行
:v/this/p<Enter> 显示所有不含"this"的行
:g!/this/p<Enter> 显示所有不含"this"的行
:g/^/s//abc/g 在文件每一行开头插入abc,"^"代
表行首。
:g/this/s//THIS/gp<Enter> 全文所有"this"都用"THIS"替代,
并且显示发生替代的行。
:3,7s/this/THIS/<Enter> 第3行到第7行中第一个"this"都用
"THIS"替代。
:3,7s/this/THIS/g<Enter> 第3行到第7行中所有的"this"都用
"THIS"替代。
:1,$s/this/THIS/g<Enter> 第一行到最后一行 (全文)中所有的
"this"都用"THIS"替代。
⒓ 替代
在命令方式下执行替代命令,按"ESC"结束。
--------------------------------------------------------
r 替代一个字符
R 替代可以到行尾,超过行尾的部分被附加
ns 替代n个字符,超过数目的输入被插入
nS 删除n行,并处于插入状态
cw 替代一个字
cc 删除当前行,并进入插入状态
--------------------------------------------------------
⒔ 其他常用命令
--------------------------------------------------------
:r 文件名 将文件名所指文件读入,并放在当前行下面
nyw 将光标后的n个字放入缓冲区
"anyw 将光标后的n个字放入a缓冲区
"Anyw 将光标后的n个字附加到a缓冲区
nyy 将当前行及下面的行共n行放入缓冲区
"anyy 将当前行及下面的行共n行放入a缓冲区,a可用其
他小写字母代替
"Anyy 将当前行及下面的行共n行附加到a缓冲区,A可用
其他大写字母代替
p 将缓冲区的内容放入当前行下面或光标后,这取决
于缓冲区中是否有完整的行。
P 将缓冲区的内容放入当前行上面或光标前,这取决
于缓冲区中是否有完整的行。
"ap 将命令"ayy保存的内容放入当前行下面,a可用其
他小写字母代替
m 移动正文
t 拷贝正文
w 写文件
--------------------------------------------------------
下面是一些例子:
:r fn 将文件fn读入,并放在当前行下面
2yy 将当前行及下一行放入缓冲区
p 将执行2yy保存的两行放到当前行下面
2,4m6 将第2到4行移到第6行下面
2,4t6 将第2到4行拷贝到第6行下面
2,4wfn 将第2到4行写到文件fn中
要使用vi,应先注册进入一用户,然后如下所示进行操作:
$ vi <filename> <Enter> ($ 为提示符)
⒉ 退出vi:
(1) "Esc" 退出插入方式进入命令方式
:w <Enter> 将文件存盘
:q <Enter> 退出vi
(2) "Esc" 退出插入方式进入命令方式
:q! <Enter> 无条件退出vi,修改内容不存盘
(3) "Esc" 退出插入方式进入命令方式
:x <Enter> 将文件存盘并退出vi
⒊ 临时退出vi:
(1) "Esc" 退出插入方式进入命令方式
:!command <Enter> 执行命令command
命令执行完成后,按<Enter>返回编辑画面。
(2) "Esc" 退出插入方式进入命令方式
:!sh <Enter> 进入子shell
进入子shell后出现$提示符,按Ctrl_d退出子shell,再按<Enter>返回编辑画面。
(3) "Esc" 退出插入方式进入命令方式
!!command <Enter> 执行命令command的结果代替当前行
【注】 前面没有“∶”,当前行原来的内容消失,代之以命令执行的结果。
⒋ 移动光标及屏幕命令:
(1) 移动一个字符的位置
--------------------------------------------------------
h 左 也可一次移动n个字符,如5h,就向左
l 右 移动5个字符的位置。
--------------------------------------------------------
(2) 移动一行的位置
--------------------------------------------------------
j 下 也可一次移动n个字符,如5j,就向下
k 上 移动5行。
nG 移到第n行
:n <Enter> 移到第n行
--------------------------------------------------------
(3) 移动一个字的位置
--------------------------------------------------------
W或w 右移一字 (光标 ①小写字母键把标点及非字母符号
定位在字首) (例如,!@#$%^&* ()_-=+等)也看作
E或e 右移一字 (光标 一个词;
定位在字尾) ②大写字母以空格为字的分界符;
B或b 左移一字 (光标 ③前面加数字n将移动n个字的位置;
定位在字首) ④从行尾右移则移向下一行的行首,
从行首左移则移向上一行的行尾。
--------------------------------------------------------
(4) 移动一句的位置
--------------------------------------------------------
( 移至句首 以.?!后加两个空格或换行符的字
) 移至句尾 符序列定义为句子。
n ( 执行n次 (
n) 执行n次)
--------------------------------------------------------
(5) 屏幕滚动
--------------------------------------------------------
Ctrl_u 上滚半屏 大写字母与小写字母等价
Ctrl_d 下滚半屏
Ctrl_f 下滚一屏
Ctrl_b 上滚一屏
--------------------------------------------------------
(6) 其他常用命令
--------------------------------------------------------
0 行首 ①这些命令都在命令方式下
^ 移到行首第一个可 使用;
见字符处 ②H、L、G、M都必须是大写
$ 行尾 字母;
Ctrl_G 显示当前行行号 ③z是小写字母,且按回车才
Ctrl_L 屏幕重显 有效。
H 屏幕左上角
L 屏幕正文最低行
G 文件最末行
M 屏幕中间行
z<Enter> 当前行翻到屏幕顶
nz<Enter> 第n行翻到屏幕顶
--------------------------------------------------------
⒌ 插入命令
--------------------------------------------------------
I 当前行的行首前插入 ①按"Esc"就退出插入方式
A 当前行的行尾附加 ②大小写字母作用不同
i 光标前插入
a 光标后插入
O 当前行前开新行
o 当前行后开新行
>> 当前行整个右移一个制表符的位置
<< 当前行整个左移一个制表符的位置
--------------------------------------------------------
⒍ 删除命令
--------------------------------------------------------
dd 删除当前行,并将删 ①在命令dd,dw,x,X前加数
除的内容存入缓冲区
dw 删除一个词 (光标到词 字n等于命令执行n次
尾部分) ②Ctrl_u 要在插入方式下
x 删除光标所在字符, 使用,按下ESC键后生效
并将删除的内容存入缓
冲区
X 删除光标之前字符,
并将删除的内容存入缓
冲区
D,d$ 删除光标至行尾的内容
d0 删除光标至行首的内容
d^ 删除光标至行首第一个
可见字符的内容
Ctrl_u 删除刚插入的所有内容
--------------------------------------------------------
要删除刚插入的内容,应在没按ESC键(插入状态下)时按下
Ctrl_u键。光标回到插入的开始处,原有插入的正文仍显示在屏
幕上,它将被键入的新内容所代替。当按下ESC键后,原插入
的正文将被删除。下面是几个删除的例子:
3x 删除光标后三个字符
3X 删除光标前三个字符
2dd 删除当前行和下面的一行共两行
:15,20d 删除第15到20行
:.,$d 删除当前行到最后一行。"."代表当前行,$代
表最后一行。
:.,+3d 删除当前行和下面的三行
:.,-3d 删除当前行和上面的三行
⒎ 恢复
按下ESC键 进入命令方式
按下u 恢复到上一命令以前的状态
再按下u 恢复到上一个u以前的状态
⒏ 重复一条命令
任何一条编辑命令执行一次后,如果还需要再执行同样的命令,应该用重复命令“.”
来节省时间,例如在一行中连续插入三个字符串abcdef,那么可以用如下的方法:
键入i 进入插入方式
键入abcdef 插入第一个字符串
按下ESC键 进入命令方式
光标移到正确
的位置,连续
按两个园点. 重复插入两个字符串abcdef
⒐ 搜索命令
(1)模式匹配特殊字
--------------------------------------------------------
^ 一行的开始
$ 一行的末尾,或文件的最后一行
. 任一字符 (除换行符外)
[ ] 字符集内的任一字符,如[abc]代表a,b,c中的任一
字符,[1-5]代表1,2,3,4,5中的任一个。
[^ ] 字符集外的任一字符,如[^abc]代表除a,b,c外的任
一字符
\ 转义,去掉特殊字符的特殊意义,如\$仅代表$字
符本身
--------------------------------------------------------
(2)常用搜索命令
--------------------------------------------------------
/串 <Enter> 向下搜索
?串 <Enter> 向上搜索
n 继续搜索
N 继续向相反方向搜索
--------------------------------------------------------
搜索命令必须在命令方式下使用。按下"/"或"?"时它会自动出现在状态行上,键入要搜
索的字符串并按回车,光标会移动到该字符串所在行,并定位在该字符串的第一个字符上。
下面的格式把光标移到字符上一行的行首:
/字符串/- <Enter>
下面是一些例子:
/abc/-2 <Enter> 光标移到含abc的行的上两行的行首
/abc/+2 <Enter> 光标移到含abc的行的下两行的行首
?123mn <Enter> 向上搜索串123mn
n 继续执行前面的搜索命令
/^this<Enter> 搜索开头为this的行
/p\.r\.c<Enter> 向下搜索字符串p.r.c,因为"."是特殊字符,所
以前面要加反斜线"\"转义。
⒑ 作标记
在光标所在处作一标记,以备需要时及时查找到该处,这也是一种重要的检索方式,完
成该功能的命令是m。
标记命令
--------------------------------------------------------
m标记 光标所在处作标记 ①标记是任选的小写字母
`标记 移到标记位置 ②注意左撇 ' 与右撇 `
'标记 移到有标记的行的开头 的不同
--------------------------------------------------------
例如有一正文前三行内容如下:
1 This is Line one
2
3 This is Line two
把光标移到第一行的L处,键入 mb,作标记b (不要回车),以后某一时候要删除从当前
光标处到标记处,只要键入: d`b 即可。
如果再把光标移到第三行的"n"处,再作一标记s,只要键入: ms即可。如果光标在别的
地方,什么时候想把光标移到第三行的"n"处,只要键入: `s 即可。如果仅是想把光标移到
第三行,只要键入: 's 即可。
⒒ 搜索并代替
对文件进行更复杂的修改,最好用搜索替代合在一起的命令。这类命令往往是一些简单
命令的组合。
搜索替代命令
--------------------------------------------------------
g 全局搜索 用于开头,代表搜索所有行,用于末
尾,代表搜索整行。
s 替代命令 如果出现在命令行中,应与其他命令
用"/"隔开。
p 显示命令
c 提问命令 对要替代的内容用符号"^"提示,若按
下"y"才发生替换,否则不替换。
v 不匹配命令
--------------------------------------------------------
搜索替代命令是在ex转换方式下使用的,即按下"ESC"键和":"之后才能使用。键入的命
令出现在状态行上,按回车执行。被搜索替代的字符串两边要加斜线"/", 如果不使用全局
命令"g",则只对第一个找到的字符串起作用。命令前面也可以加地址范围的选择。
下面是使用命令的例子:
:s/abc/xyz/<Enter> 用xyz替换当前行找到的第一个abc
:s/ab/x/g<Enter> 用x替换当前行所有的ab
:g/22/s//456/<Enter> 每行找到的第一个字符串"22"都用
字符串"456"替换
:g/22/s//456/g<Enter> 全文找到的所有字符串"22"都用串
"456"替换,第一个"g"代表"每行",
第二个"g"代表一行中的全部。
:g/this/p<Enter> 显示所有含"this"的行
:v/this/p<Enter> 显示所有不含"this"的行
:g!/this/p<Enter> 显示所有不含"this"的行
:g/^/s//abc/g 在文件每一行开头插入abc,"^"代
表行首。
:g/this/s//THIS/gp<Enter> 全文所有"this"都用"THIS"替代,
并且显示发生替代的行。
:3,7s/this/THIS/<Enter> 第3行到第7行中第一个"this"都用
"THIS"替代。
:3,7s/this/THIS/g<Enter> 第3行到第7行中所有的"this"都用
"THIS"替代。
:1,$s/this/THIS/g<Enter> 第一行到最后一行 (全文)中所有的
"this"都用"THIS"替代。
⒓ 替代
在命令方式下执行替代命令,按"ESC"结束。
--------------------------------------------------------
r 替代一个字符
R 替代可以到行尾,超过行尾的部分被附加
ns 替代n个字符,超过数目的输入被插入
nS 删除n行,并处于插入状态
cw 替代一个字
cc 删除当前行,并进入插入状态
--------------------------------------------------------
⒔ 其他常用命令
--------------------------------------------------------
:r 文件名 将文件名所指文件读入,并放在当前行下面
nyw 将光标后的n个字放入缓冲区
"anyw 将光标后的n个字放入a缓冲区
"Anyw 将光标后的n个字附加到a缓冲区
nyy 将当前行及下面的行共n行放入缓冲区
"anyy 将当前行及下面的行共n行放入a缓冲区,a可用其
他小写字母代替
"Anyy 将当前行及下面的行共n行附加到a缓冲区,A可用
其他大写字母代替
p 将缓冲区的内容放入当前行下面或光标后,这取决
于缓冲区中是否有完整的行。
P 将缓冲区的内容放入当前行上面或光标前,这取决
于缓冲区中是否有完整的行。
"ap 将命令"ayy保存的内容放入当前行下面,a可用其
他小写字母代替
m 移动正文
t 拷贝正文
w 写文件
--------------------------------------------------------
下面是一些例子:
:r fn 将文件fn读入,并放在当前行下面
2yy 将当前行及下一行放入缓冲区
p 将执行2yy保存的两行放到当前行下面
2,4m6 将第2到4行移到第6行下面
2,4t6 将第2到4行拷贝到第6行下面
2,4wfn 将第2到4行写到文件fn中