普通模式
进入插入模式
命令 | 说明 |
---|---|
i | 从光标所在位置前开始插入文本 |
I | 将光标移动到当前行的行首,然后在其前插入文本 |
a | 用于在光标当前所在位置后追加新文本 |
A | 将光标挪到所在行的行尾,从那里开始插入新文本 |
o | 将在光标所在行的下面开一行,并将光标置于该行的行首,等待输入文本 |
O | 在光标所在行的上面插入一行,并将光标置于该行的行首,等待输入文本 |
普通模式光标定位
命令 | 说明 | 命令 | 说明 |
---|---|---|---|
G | 将光标移至最后一行行首 | $ | 移动到光标所在行的行尾 |
nG | 光标移至第n行首 | ^ | 移动到光标所在行的第一个字符(非空格) |
n+ | 光标下移n行 | h, j, k, l | 分别用于光标左移,下移,上移,右移一个字符 |
n- | 光标上移n行 | H | 将光标移至当前屏幕首行的行首(即左上角) |
n$ | 光标移至第n行尾 | M | 将光标移至屏幕显示文件的中间行的行首 |
0(数字0) | 移动到光标所在行的行首 | L | 将光标移至当前屏幕的最底行的行首 |
普通模式下的替换和删除
命令 | 说明 | 命令 | 说明 |
---|---|---|---|
rc | 用字符c替换光标所指向的当前字符 | nrc | 用字符c替换光标所指向的前n个字符 |
x | 删除光标处的字符 | nx | 删除从光标位置开始向右的n个字符 |
dw | 删除一个单词,光标移至词首 | ndw | 删除n个指定的单词 |
db | 删除光标所在位置之前的一个词 | ndb | 删除光标所在位置之前的n个词 |
dd | 删除光标所在的整行 | ndd | 删除当前行及其后n-1行的内容 |
dG | 删除光标位置到最后一行的所有内容 | d1G | 删除光标所在位置到第一行的所有内容 |
d$ | 删除光标位置到当前行的末尾的内容 | d0 | 删除光标位置到当前行的开始的内容 |
普通模式下的复制和粘贴
命令 | 说明 |
---|---|
yy | 将当前行的内容复制到缓冲区 |
nyy | 将当前开始的n行内容复制到缓冲区 |
yG | 将当前光标位置到最后一行的所有内容复制到缓冲区 |
y1G | 将当前光标位置到第一行的所有内容复制到缓冲区 |
y$ | 将当前光标位置到当前行尾的内容复制到缓冲区 |
y0 | 将当前光标位置到当前行开始的内容复制到缓冲区 |
p | 将缓冲区的内容写出到光标所在的位置 |
普通模式下的字符串搜索
命令 | 说明 | 命令 | 说明 |
---|---|---|---|
/str | 往右移动到有str的地方 | n | 向相同的方向移动到有str的地方 |
?str | 往左移动到有str的地方 | N | 向相反的方向移动到有str的地方 |
普通模式下的撤销和重复
命令 | 说明 |
---|---|
u | 取消前一次的误操作或不合适的操作对文件造成的影响,使之恢复到这种误操作或不合适操作被执行之前的状态 |
. | 再执行一次前面刚完成的某个命令 |
普通模式下退出 Vi
命令 | 说明 |
---|---|
ZZ | 存盘退出 |
ZQ | 不保存退出 |
命令模式
命令模式下跳行
命令 | 说明 |
---|---|
:n | 直接输入要移动的行号即可实现跳行 |
命令模式下搜索和替换字符串
命令 | 说明 |
---|---|
:/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 |
:n1,n2s/str1/str2/g | 将从n1行到n2行找到的所有的str1替换为str2 |
:1,s/str1/str2/g | 将从第1行到当前位置的所有的str1替换为str2 |
:.,$s/str1/str2/g | 将从当前位置到结尾的所有字符串str1替换为str2 |
:1,$s/str1/str2/g | 将从第1行到最后一行的所有字符串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为止的所有内容 |
命令模式下的文件相关命令
命令 | 说明 |
---|---|
:w | 将当前编辑的内容存盘 |
:w file | 将当前编辑的内容写到file文件中 |
:n1,n2w file | 将从n1开始到n2结束的行写到file文件中 |
:nw file | 将第n行写到file文件中 |
:1,.w file | 将从第1行起到光标当前位置的所有内容写到file文件中 |
:.,$w file | 将从光标当前位置起到文件结尾的所有内容写到file文件中 |
:r file | 打开另一个文件file |
:e file | 新建file文件 |
:f file | 把当前文件改名为file文件 |
命令模式下执行Shell命令
命令 | 说明 |
---|---|
:!Cmd | 运行Shell命令Cmd |
:n1,n2 w ! Cmd | 将n1到n2行的内容作为Cmd命令的输入,如果不指定n1和n2,则将整个文件的内容作为命令Cmd的输入 |
:r ! Cmd | 将命令运行的结果写入当前行位置 |
命令模式下设置 Vi环境
命令 | 说明 |
---|---|
:set autoindent | 缩进每一行,使之与前一行相同 |
:set noautoindent | 取消缩进 |
:set number | 在编辑文件时显示行号 |
:set nonumber | 不显示行号 |
:set ruler | 在屏幕底部显示光标所在的行,列位置 |
:set noruler | 不显示光标所在的行,列位置 |
:set tabstop=value | 设置显示制表符的空格字符个数 |
:set wrapmargin=value | 设置显示器的右页边。 当输入进入所设置的页边时,编辑器自动回车换行 |
:set | 显示设置的所有选项 |
:set all | 显示所有可以设置的选项 |
命令模式退出 Vi
命令 | 说明 |
---|---|
:q | 退出vi |
:wq | 保存退出 vi |
:q! | 不保存退出vi |