Vi 编辑器
Vi的用法
1.简介
Vi,是一个文本编辑器,可以执行输出、删除、查找、替换、块操作等众多文本操作,vi不是一个排版程序。不像word或WPS那样可以对字体、格式、段落等属性进行编排,他只是一个文本编辑器。
2.进入vi文本编辑器的方式
方式 | 说明 |
vi | 进入vi默认模式 |
vi filename | 打开新建文件filename,并将光标置于第一行 |
vi +n filename | 打开文件filename,并将光标置于n行首 |
vi + filename | 打开文件filename,并将光标置于最后一行。 |
vi +/pattern filename | 打开文件filename ,并将光标置于第一个与pattern匹配的行。 |
3.Vi的三种模式
4.命令模式下的操作 a o i
1) 命令模式下进入输入模式
命令 | 说明 |
i | 光标所在位置前开始插入文本 |
I | 将光标移至当前行的行首,然后在其插入文本 |
a | 当前光标所在位置之后追加文本。 |
A | 将光标挪到当前行的行尾,从那里开始插入新文本 |
o | 将光标所在行的下面新开一行,并将光标置于该行的行首,输入文本 |
O | 在光标所在行的上面插入一行,并将光标置于该行的行首,等待输入文本 |
2) 命令模式下的光标定位
命令 | 说明 |
G | 将光标移至最后一行行首 尾部 |
gg | 将光标移至第一行(首行) 首部 |
nG | 光标移至第n行的行首 直接定位 |
n+ | 光标下移n行 |
n- | 光标向上移动n行 |
n$ | 光标移至第n行行尾 相对于当前行 |
移动至所在行的行首 绝对行首 | |
$ | 移到光标所在行的行尾 |
^ | 移到光标所在行的第一个字符(非空格) 非空白符 |
h,j,k,l | 左,下,上,右 |
3) 命令模式下的替换和删除
命令 | 说明 |
rc | 用字符c替换光标所指向的当前字符 |
nrc | 用字符c替换光标所指向的n个字符 |
x | 删除光标处的字符 |
nx | 删除从光标位置开始向右的n个字符 |
dw | 删除一个单词 |
ndw | 删除n个指定的单词 |
db | 删除光标所在位置之前的单词 |
ndb | 删除所在位置之前的n个单词 |
dd | 删除光标所在整行 |
ndd | 删除n行 |
dG | 删除光标位置到最后一行的所有内容 |
d1G | 删除光标位置到第一行的所有内容 |
d$ | 删除光标位置到当前行的末尾的内容 |
d0 | 删除光标位置到当前行开始的内容 |
4) 命令模式下的复制和粘贴
命令 | 说明 |
yy | 当前行内容复制到缓冲区 |
nyy | 将当前行开始n行内容复制到缓冲区 |
yG | 将当前光标位置到最后一行的所有内容复制到缓冲区 |
y1G | 将当前光标位置到第一行的所有内容复制到缓冲区 |
y$ | 将当前光标到当前行尾内容复制到缓冲区 |
y0 | 将当前光标位置到当前行开始的内容复制缓冲区 |
p | 将缓冲区的内容写出到光标所在位置 |
5) 命令模式下的搜索
命令 | 说明 |
/str | 向下查找 |
?str | 向上查找 |
n | 相同方向移动 |
N | 向反方向移动 |
6) 命令模式下撤销、重做
命令 | 说明 |
u | 撤销 |
Ctrl+r | 重做撤销的动作 |
7) 命令模式下退出vi
命令 | 说明 |
ZZ | 存盘退出 |
ZQ | 不保存退出 |
8) 翻屏
命令 | 说明 |
Ctrl+f | 向下翻 |
Ctrl+b | 向上翻 |
5.末行模式下的操作
1) 末行模式下退出vi
命令 | 说明 |
:q | 退出 没有动过文件 |
:wq | 保存并退出 |
:q! | 不保存并退出 |
:w | 保存 |
:x | 保存退出等价于:wq |
2) 末行模式下的跳行
命令 | 说明 |
:n | 直接输入移动的行号 |
3) 在命令模式下搜索和替换字符串
命令 | 说明 |
:/str | 向后搜索 n 同方向切换 N 反方向切换 |
:?str | 向前搜索 n 同方向切换 N 反方向切换 |
:/str/w file | 将包含有str行的写到file中 搜索 io读写 写磁盘 |
:/str1/,/str2/w file | 从str1开始到str2结束的内容写入到file文件中 |
:s/str1/str2/ | 找到的第一个str1替换为str2 在同一行内替换第一个 |
:s/str1/str2/g | 找到的所有的str1替换为str2 在同一行内替换所有 |
:n1,n2s/str1/str2/g | 从n1行到n2行找到所有的str1替换为str2 |
:1,.s/str1/str2/g | 从第一行到当前位置所有的str1替换为str2 |
:.,$s/str1/str2/g | 从当前位置到结尾所有的str1替换为str2 |
4) 在命令模式下复制、移动和删除文件行
命令 | 说明 |
:n1,n2 co n3 | 将从n1开始到n2开始为止所有内容复制到n3后面 copy |
:n1,n2 m n3 | 将从n1开始到n2为止的所有内容移动到n3后面 |
:d | 删除当前行 |
:nd | 根据指定的行号删除指定的行 |
:n1,n2 d | 删除从n1开始到n2所有内容 |
:.,$d | 删除从当前行到结尾的所有内容 |
:0,.d | 删除当前行到首行 |
:/str1/,/str2/d | 删除从str1开始到str2为止所有内容 |
5) 在命令模式下的文件相关命令
命令 | 说明 |
:w file | 将当前编辑的内容写到file文件中 另存为 |
:n1,n2 w file | 将从n1开始到n2结束的行写入到file中 |
:nw file | 将第n行写入到文件中 |
:1,.w file | 从第一行起到光标当前位置写入到file文件中 |
:.,$ w file | 从当前位子到文件结尾内容写入到file中 |
:r file | 打开另一个文件 |
:e file | 新建file文件 |
:f file | 把当前文件改名为file文件 |
6) 在命令模式下执行Shell命令
命令 | 说明 |
:!cmd | 运行Shell命令 |
:r!cmd | 将命令运行的结果写入当前位置 |
7) 设置vi的环境
命令 | 说明 |
:set nu | 设置行号 |
:set nonu | 取消行号 |
:set readonly | 设为只读 |