vi 常用命令
命令线路图
- 重复次数(先输入数字 n,再跟上一个命令.会让此命令执行 n 次)
- 移动和选择
- 编辑操作(删除,复制,粘贴,替换,缩排)
- 撤销和重复
- 查找替换
- 编辑
工作模式

0.末行模式下的命令
| 命令 | 功能 |
|---|---|
| w | 保存 |
| q | 退出(没保存不能退出) |
| q! | 强行退出(不保存所编辑过的内容) |
| wq | 保存并退出 |
| x | 保存并退出 |
1.新建\打开文件
$ vi 文件名.后缀
文件存在 , 打开文件
文件不存在 , 新建文件
$ vi 文件名.后缀 +(行号)
打开文件并把光标定位到指定行
如果没有指定行号那么就把光标定位到文件末尾
2.移动和选择
| 命令 | 功能 |
|---|---|
| h | 向左 |
| j | 向下 |
| k | 向上 |
| l | 向右 |
行内移动
| 命令 | 功能 |
|---|---|
| w | 向后移动一个单词 |
| b | 向前移动一个单词 |
| 0 | 行首 |
| ^ | 行首(第一个非空白字符) |
| $ | 行尾 |
跨行移动
| 命令 | 功能 |
|---|---|
| gg | 文件顶部 |
| G | 文件尾部 |
| 数字gg | 移动到 数字 对应行 |
| 数字G | 移动到 数字 对应行 |
| :数字 | 移动到 数字 对应行 |
跨屏移动
| 命令 | 功能 |
|---|---|
| Ctrl + f | 向下翻页 |
| Ctrl + b | 向上翻页 |
| H | 屏幕顶部 |
| M | 屏幕中部 |
| L | 屏幕底部 |
段落移动 (用空行来区分段落)
| 命令 | 功能 |
|---|---|
| { | 上一段 |
| } | 下一段 |
括号切换 (用于成对儿出现的括号() [] {})
| 命令 | 功能 |
|---|---|
| % | 括号间切换 |
标记(某位置需要一会儿还回来,则可以为此位置添加标记)
| 命令 | 功能 |
|---|---|
| m字母 | 标记此位置(字母为标记名) |
| ‘字母 | 回到上次标记名为 字母 标记的位置 |
选中文本(可视模式,可配合移动命令使用)
| 命令 | 功能 |
|---|---|
| v | 从光标位置开始选中文本 |
| V | 从光标所在行开始按 行 选中文本 |
| Ctrl + v | 垂直 方向选中文本 |
3.编辑操作
tips: vi 的文本缓冲区和系统的剪切板不是同一个
撤销和恢复撤销
| 命令 | 功能 |
|---|---|
| u | 撤销命令 |
| ctrl + r | 恢复撤销 |
删除(本质是剪切)
| 命令 | 功能 |
|---|---|
| x | 删除光标所在的 字符 或者 选中的文字 |
| d | 结合移动命令,删除到移动命令对应的内容 |
| dd | 删除一行文字,数字dd 可删除多行 |
| D | 从光标位置删除至行尾 |
tips: d’字母 从光标所在行删除到标记行之间的所有代码
复制\粘贴
| 命令 | 功能 |
|---|---|
| y | 复制(结合移动命令使用) |
| yy | 复制一行 |
| p | 粘贴 |
替换(会进入替换模式 esc 退出此模式)
| 命令 | 功能 |
|---|---|
| r | 替换当前字符 |
| R | 替换当前光标后的字符 |
缩排(对代码增加缩进)
| 命令 | 功能 |
|---|---|
| >> | 向右增加缩进 |
| << | 向左增加缩进 |
| . | 重复命令 |
4.查找和替换
常规查找
| 命令 | 功能 |
|---|---|
| /str | 查找str |
| n | 查找下一个 |
| N | 查找上一个 |
| * | 查找光标所在单词,从当前位置向后查找 |
| # | 查找光标所在单词,从当前位置向前查找 |
tips:查找到的内容会一直高亮显示,如需要取消高亮显示,则查找一个文件不存在字符即可
替换
tips:通用格式:%s///g
全局替换
| 命令 | 功能 |
|---|---|
| :%s/旧文本/新文本/g | 会一次性替换文件中出现的所有旧文本 |
可视区域替换
| 命令 | 功能 |
|---|---|
| :s/旧文本/新文本/g | 替换所选内容中的旧文本 |
确认替换(替换之前要先确认)
| 命令 | 功能 |
|---|---|
| :%s/旧文本/新文本/gc | 替换所选内容中的旧文本 |
| y | yes 替换 |
| n | no 不替换 |
| a | all 替换所有 |
| q | quit 退出替换 |
| l | last 最后一个替换,并把光标移动到行首 |
| ctrl + E | 向下滚屏 |
| ctrl + Y | 向上滚屏 |
5.编辑
从命令模式快速进入编辑模式
| 命令 | 功能 |
|---|---|
| o | 当前行下方插入一空行,并定位到此空行 |
| O | 当前行上方插入一空行,并定位到此空行 |
| i | 当前光标所在字符位置插入文本 |
| I | 当前行首位置插入文本 |
| a | 当前字符后添加文本 |
| A | 当前行末添加文本 |
编辑命令和数字的连用
eg: 输入10个#
- 命令模式下输入
10 - 输入
i进入编辑模式 - 输入
*(即要重复的内容) - 通过
esc返回到命令模式之后就会重复执行第2和第3步达到10个#的目的
tips: 正常情况下,进入编辑模式前,不要按数字
eg:利用可视块给多行代码增加注释
- 利用
^移动光标到需要注释的第一行的行首 - 通过
Ctrl + v进入可视块 - 使用
j向下连续选中要注释的行 - 输入
I进入编辑模式(可视模式下无法通过 i 来进入编辑模式),并在行首插入字符#(Python中) - 通过
esc返回命令模式,则会为刚才所有选中行行首增加#
6.末行命令扩展
| 命令 | 功能 |
|---|---|
| :e 文件名 | 会在当前窗口切换大此文件 |
| :e . | 通过 vi 内置浏览器,显示当前目录下的文件 |
| :n 文件名 | 新建文件 |
| :w 文件名 | 另存为文件(当前编辑的文件并不会切换到新保存的文件内) |
tips: 切换文件时,必须要保证当前文件已经保存
6.分屏命令
| 命令 | 功能 |
|---|---|
| :sp | 横向分屏(两个屏幕一上一下),同时显示当前正在编辑的文件 |
| :sp 文件名 | 横向分屏,上方显示分屏之前的文件,下方显示新打开的文件 |
| :vsp [文件名] | 纵向分屏(两个屏幕一左一右),加不加文件名效果同上 |
操作多个屏幕之前必须先通过ctrl + w然后再执行下面的命令
| 命令 | 功能 |
|---|---|
| w | 切换到下一个窗口 |
| r | 互换窗口 |
| c | 关闭当前窗口(但不能关闭最后一个) |
| q | 退出当前窗口(如果是最后一个则退出 vi) |
| o | 关闭其他窗口 |