vi编辑器是linux系统下的标准正文编辑器,有三种基本模式:命令行模式、插入模式和底行命令模式。
1.命令行模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式或底行命令模式下。
2. 插入模式:只有在这个模式下,才可以做文字输入,按「ESC」键可回到命令行模式。
3.底行命令模式: 将文件保存或退出vi,也可以设置编辑环境,如查找字符串、列出行号等。
一、三种模式的切换
进入vi:vi filename,刚进入vi编辑器时,处于命令行模式,如下图进行三种模式之间的切换:
vi -r filename //打开文件(恢复奔溃文件)编辑
vi -R filename //以只读的方式打开一个文件
二、vi编辑器中的命令
vi编辑器中的命令非常多,无需刻意记忆,只需多在练习中使用,增强熟练度,才能慢慢的把vi编辑器用好用熟练。
1.命令行模式下的命令
(1)光标移动命令
h 左移光标一个字符
l 右移光标一个字符
k 光标上移一行
j 光标下移一行
^ 光标移动至行首
0 数字“0”,光标移至文章的开头
G 光标移至文章的最后
$ 光标移动至行尾
(2)翻页组合键
Ctrl+f 向前翻屏
Ctrl+b 向后翻屏
Ctrl+d 向前翻半屏
Ctrl+u 向后翻半屏
(3)命令模式下的编辑操作
i 在光标位置前插入字符
a 在光标所在位置的后一个字符开始增加
o 插入新的一行,从行首开始输入
ESC 从输入状态退至命令状态
x 删除光标后面的字符
nx 删除光标后的n个字符
X (大写X) 删除光标前面的字符
nX 删除光标前面的n个字符
dd 删除光标所在的行
ndd 删除光标所在行数后面的n行
yw 复制光标所在位置的一个字
nyw 复制光标所在位置的n个字
yy 复制光标所在位置的一行
nyy 复制光标所在行数后面的n行
p 粘贴
cw 更改光标所在位置的一个字
ncw 更改光标所在位置的n个字
(4)搜索关键字
/关键字 向下搜索关键字
?关键字 向上搜索关键字
n 继续进行同方向的搜索
N 继续进行反方向的搜索
搜索特殊字符(* ^ $ [ / |),在前面加转义字符
(5)复原命令
u 取消最近一次的操作
U 把当前行恢复成被编辑之前的状态
2.底行命令模式下的命令
:wq 在命令模式下,执行存盘退出操作
:w 在命令模式下,执行存盘操作
:w! 在命令模式下,执行强制存盘操作
:q 在命令模式下,执行退出vi操作
:q! 在命令模式下,执行强制退出vi操作
:e文件名 在命令模式下,打开并编辑指定名称的文件
:n 在命令模式下,如果同时打开多个文件,则继续编辑下一个文件
:f 在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例
:set number 在命令模式下,用于在最左端显示行号
:set nonumber 在命令模式下,用于在最左端不显示行号
:20 <回车> 光标移到第20行的行首
:/关键字/ 向下搜索关键字
:?关键字? 向上搜索关键字
全局替换命令
:! command 执行Shell命令
:r ! command 读取Shell命令的输出内容并插入文本
:recover 未正常退出时恢复原文件
:set all 显示所有设置列表
:set list 行结尾符显示$
:set autoindent 正文自动缩进
:set lines=24 设置默认缓冲显示行
三、文本移动和编辑多个文件
1.缓冲区方式的文本移动
用户在用vi编辑器编辑文件时,是在临时编辑缓冲区中进行的。命名缓冲区是表示临时存储的缓存区,就如同windows中的复制和剪切,由字母a-z命名不同的命名缓冲区,可以将不同的内容复制或剪切到不同的命名缓冲区中,回到编辑缓冲区执行粘贴命令,到达文本的移动目的。
(1)从编辑缓冲区到命名缓冲区(复制或剪切)
命令格式:"字母名+行号+操作命令(Y,dd)
(2)从命名缓冲区到编辑缓冲区(粘贴)
命令格式:"字母名+操作命令(P,p)
(3)删除缓冲区
删除缓冲区可以由数字1-9指定,如"25dd,表示把光标所在行的下5行删除并放到2删除缓冲区里。用"2p再粘贴回去。
2.按行操作的文本移动
在底行命令模式下,执行按行操作文本移动。
(1)按行复制(co命令)
:1,3 co . 把1-3行文本复制到光标所在位置
:1,3 co 7 把1-3行文本复制到第7行位置
(2)文本块移动(m命令)
:1,3 m 7 把1-3行文本移动到第7行的位置
(3)文件间的文本移动(w命令)
:2,5 w filename 把2-5行文本写到另一个新文件中
:2,5 w >> filename 把2-5行文本追加到另一个文件中
3.编辑多个文件
vi filename1 filename2…… 同时打开多个文件进行编辑
:n 编辑下一个文件命令
:e filename3 编辑指定文件
:e # 返回刚才编辑的文件