两种模式:插入模式+命令行模式(命令行模式+底行模式)
说明:第一列*表示常用程度
---基本篇
1 进入vi
vi file --默认命令行模式,切换到插入模式[i]
2 esc -退出插入模式
3 保存:命令行模式下
:w filename (输入 「w filename」将文章以指定的文件名filename保存)
:wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)
:sh 切换到shell状态
--命令行模式功能键
1 进入输入模式
*** a 在当前游标之后输入
A 在当前行之末输入
*** i 在当前游标之前输入
I 在当前行之首输入
*** o 在当前行之下新增一行,并在新增行输入
O 在当前行之上新增一行,并在新增行输入
esc:退出输入模式
2 游标移动
*** h 向左移动一个字元
*** l 向右移动一个字元
*** j 向下移动一个字元
*** k 向上移动一个字元
* b 左移一个单词,至词首
* w 右移一个单词,至词尾
* 0 移到当前行行首
* $ 移到当前行行尾
+ 移至下一行的行首
- 移至上一行的行首
H 移至视窗的第一行
M 移至视窗的中间一行
L 移至视窗的最后一行
G 移至该文件的最后一行
nG 移至该文档的第n行
n+ 下移n行
n- 上移n行
按数字「0」:移到文章的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的"行尾"。
按「^」:移动到光标所在行的"行首"
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l。
3 视窗移动
*** <Ctrl> + f 视窗下卷一页
*** <Ctrl> + b 视窗上卷一页
<Ctrl> + d 视窗下卷半页
<Ctrl> + u 视窗上卷半页
* <Ctrl> + e 视窗下卷一行
* <Ctrl> + y 视窗上卷一行
4 删除操作
*** x 删除游标所在字元
X 删除游标前一字元
* dw 从游标当前位置开始向后删除一个单词
db 从游标当前位置开始向前删除一个单词
* d0 从行首删除至当前游标位置
* d$ 从游标当前位置删除至行尾
*** dd 删除游标所在行
D 同d$
5 修改操作
*** s 修改游标所在字元,修改完成后按Esc键结束
S 修改整行内容,修改完成后按Esc键结束
* r 替换当前游标所在字元
* R 进入替换状态,直至按Esc键结束
* cw 修改一个单词(从游标位置至词尾)
cb 修改一个单词(从词首至游标位置)
* cc 修改整行内容,完成后按Esc键结束,同S
* c0 修改行首至游标位置的内容
* c$ 修改游标位置至行尾的内容
~ 游标所在字元大小写切换
6 指令重复
*** nx 删除n个字元
*** ndd 删除n行
*** ns 修改n个字元
7 取消前一动作(Undo)
*** u 撤消上一指令的结果
8 查找字符串
*** /字符串 从当前游标向后查找该字符串
*** ?字符串 从当前游标向前查找该字符串
*** n 从当前游标向后查找下一个字符串
*** N 从当前游标向前查找下一个字符串
1 环境设置
:set 显示已设置的环境状况
:set all 显示所有的环境设置选项
* :set nu 显示行号
* :set nonu 不显示行号
* :set ts=n 设置Tab键的长度为n
2 执行指令
* :10,20d 删除第10行至第20行的内容
:10d 删除第10行的内容
:%d 删除全部内容
* :10,20co30 将第10行至第20行的内容复制到第30行之后
* :10,20mo30 将第10行至第20行的内容移动到第30行之后
:1,$s/old/new 将第1行至最后一行中的old替换成new
:1,$s/^/new 将第1行至最后一行的内容前面插入new
* :10 将游标移至第10行
3 重复指令
. 重复上一条指令