普通模式进入插入模式:
i/a
| 从光标所在位置之前、之后开始插入
|
I/A
| 光标移到行首、行尾,然后开始插入
|
o/O
| 光标所在行的下、上新插入一行,然后开始插入
|
普通模式下光标移动:
G
| 光标移动到文件最后一行的行首
|
nG
| 相对文件的开始的第n行开始,如:1G光标移到第1行开始
|
$
| 光标移到当前所在行的行尾
|
n$
| 光标移到第n行的行尾
|
0
| 光标移到当前所在行的行首
|
n+/n-
| 光标上移或下移n行
|
^
| 光标移到所在行的第一个非空格字符
|
h/j/k/l
| 光标左、下、上、右移动
|
H
| 光标移至当前屏幕左上角
|
M
| 光标移至当前屏幕显示文件的中间行行首
|
L
| 光标移到当前屏幕最后一行行首
|
普通模式下替换删除:
rc
| 用字符c替换光标所指向的当前字符
|
nrc
| 用字符c替换从光标开始的n个字符
|
x
| 删除光标所在处的字符
|
nx
| 删除从光标所在位置开始向右的n个字符
|
dw
| 删除一个单词。若光标处在某个词中间,则从光标所在位置开始删除至词尾并连同空格
|
ndw
| 删除n个指定的单词
|
db
| 删除光标所在位置之前的一个词
|
ndb
| 删除光标所在位置之前的n个词
|
dd / D
| 删除光标所在整行
|
ndd
| 删除光标所在行及之后的n-1行
|
dG
| 删除光标所在位置至文件尾的所有内容
|
d1G
| 删除光标所在位置到文件首的所有内容
|
d$
| 删除光标所在位置到当前行的末尾的内容
|
d0
| 删除光标所在位置到当前行的开始的内容
|
普通模式下的复制和粘贴:
yy
| 将当前行的内容复制到缓冲区 |
nyy
| 将当前开始的n行内容复制到缓冲区
|
yG
| 将当前光标所在位置到最后一行的所有内容复制到缓冲区
|
y1G
| 将当前光标所在位置到第1行的所有内容复制到缓冲区
|
y$
| 将当前光标所在位置到当前行的末尾的内容复制到缓冲区
|
y0
| 将当前光标所在位置到当前行的开始的内容复制到缓冲区
|
p
| 将缓冲区的内容写出到光标所在位置
|
普通模式下的搜索字符串:
/str
| 向右移动到有str的地方
|
?str
| 往左移动到有str的地方
|
n
| 向相同的方向移动到下一个有str的地方
|
N
| 向相反的方向移动到下一个有str的地方
|
普通模式下的撤销和重复:
普通模式下退出Vi:
命令模式下的跳行:
命令模式下搜索和替换字符串:
:/str/
| 从当前光标开始往右移动到有str的地方
|
:?str?
| 从当前光标开始往左移动到有str的地方
|
:/str/w file
| 将包含有str的行写到文件file中
|
:/str1/,/str2/w file
| 将从str1开始到str2结束的内容写入file文件中
|
:s/str1/str2/
| 将找到的第1个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/gc
| 将从第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命令的输入,如果不指定,则将整个文件作为命令的输入 |
:r ! Cmd | 将命令运行结果写入当前行位置 |
命令模式下退出Vi
:
:q | 退出Vi |
:wq | 退出保存Vi |
:q! | 不保存退出Vi |
命令模式下设置Vi环境
:
:set autoindent | 缩进每一行,使之与前一行相同。 |
:set noautoindent | 取消缩进 |
:set number | 在编辑文件时显示行号 |
:set nonumber | 不显示行号 |
:set ruler | 在屏幕底部显示光标所在的行、列位置 |
:set noruler | 不显示光标所在行、列位置 |
:set tabstop=value | 设置显示制表符空格字符个数 |
:set wrapmargin=value | 设置显示器的右页边。当输入进入所设置的页边时,编辑器自动回车换行 |
:set | 显示设置的所有环境选项 |
:set all | 显示所有可以设置的环境选项 |
转载于:https://my.oschina.net/jasonli0102/blog/551715