分三大模式:普通模式(默认)、插入模式、末行模式(冒号:) 打开 vi 后默认是普通模式,按
i/a/o进入插入模式;插入模式按Esc回到普通模式;普通模式按:进入末行模式。
一、模式切换(最基础)
二、普通模式:光标移动
字符移动
h左、j下、k上、l右(也可以方向键)
单词移动
w下一个单词开头b上一个单词开头e当前单词末尾
行内跳转
0跳到行首$跳到行尾^跳到本行第一个非空字符
行间跳转
gg文件第一行G文件最后一行nG跳到第 n 行,如10G到第 10 行Ctrl+f向下翻一页(forward)Ctrl+b向上翻一页(backward)
三、普通模式:删除、剪切、复制、粘贴
vi 里删除 = 剪切 | 命令 | 作用 | |---|---| |
x| 删除光标下一个字符 | |X| 删除光标前一个字符 | |dd| 删除(剪切)整行 | |ndd| 删除 n 行,如3dd删除 3 行 | |dw| 删除光标到单词结尾 | |d0| 删除光标到行首 | |d$| 删除光标到行尾 | |yy| 复制当前整行 | |nyy| 复制 n 行,2yy复制两行 | |yw| 复制一个单词 | |p| 在光标下方粘贴 | |P| 在光标上方粘贴 | |u| 撤销(undo) | |Ctrl+r| 重做(redo) |
四、普通模式:替换、修改
r:替换光标处单个字符(按 r 再按新字符)R:连续替换模式,Esc 退出cc:清空当前行并进入插入cw:删除当前单词,进入插入
五、末行模式(: 开头,回车执行)
保存退出
:w 保存
:w 文件名 另存为
:q 退出(没修改才能退)
:q! 强制退出,不保存
:wq 保存并退出
:wq! 强制保存退出
:x 保存退出(和wq类似,无修改不改动文件时间)
行号
:set nu 显示行号
:set nonu 关闭行号
:set nu! 切换行号开关
跳转
:10 跳到第10行
:$ 跳到最后一行
查找替换(sed 风格)
格式::[范围]s/旧内容/新内容/[标志]
:s/abc/123/本行第一个 abc 替换成 123:s/abc/123/g本行全部abc 替换:%s/abc/123/g全文替换,g=global:%s/abc/123/gc全文替换,每次确认(c=confirm)
范围:
%代表全文;10,20代表 10~20 行
执行 shell、其他
:!ls 临时执行shell命令ls,回车回vi
:r 文件名 把别的文件内容读到当前光标下
六、普通模式搜索(不用冒号)
/关键词:向下搜索,回车;n下一个,N上一个?关键词:向上搜索*:搜索光标下这个单词
七、可视模式(选中区块)
普通模式按:
v字符可视(逐字符选)V行可视(整行选中)Ctrl+v块可视(矩形块,适合列操作) 选中后:d删除、y复制、>缩进、<反缩进
八、高频速记清单(日常最常用)
i 插入,Esc回普通
h j k l 移动
dd 删除行,yy复制行,p粘贴
u撤销,Ctrl+r重做
gg 首行,G末行
/xxx 搜索
:wq 保存退出,:q! 不保存退出
:set nu 打开行号
:%s/a/b/g 全文替换