文章目录
1. 打开、新建文件
vi 文件名
vi 文件名 +行数
定位到指定行:例如vi a.py +12
2. 三种工作模式
-
命令模式:“入口”,实现定位、翻页、复制、粘贴等操作。(见下节)
-
末行模式:“出口”,实现保存、退出等操作。
命令 英文 功能 :w
write 保存 :q
quit 退出,如果没有保存,不允许退出 :q!
quit 强行退出,不保存退出 :wq
write & quit 保存并退出 :x
保存并退出 -
编辑模式:正常编辑文字。
三种工作模式的切换以命令模式为中介。
3. 常用命令
3.1 移动
-
基本:光标上下左右移动
命令 功能 h
向左 j
向下 k
向上 l
向右 -
行内、单词移动
命令 英文 功能 w
word 向后移动一个单词 b
back 向前移动一个单词 0
(数字0)行首 ^
行首,第一个不是空白字符的位置 $
行尾 -
行间跳转
命令 英文 功能 gg
go 文件顶部 G
go 文件末尾 数字gg
go 移动到 数字 对应行数 数字G
go 移动到 数字 对应行数 :数字
移动到 数字 对应行数 H
Head 屏幕顶部 M
Middle 屏幕中间 L
Low 屏幕底部 -
翻页
命令 英文 功能 Ctrl + b
back 向上翻页 Ctrl + f
forward 向下翻页 -
段落移动
命令 功能 {
上一段 }
下一段 -
括号切换
命令 功能 %
括号匹配及切换 -
标记移动
命令 英文 功能 mx
mark 添加标记 x,x 是 a~z 或者 A~Z 之间的任意一个字母 'x
直接定位到标记 x 所在位置
3.2 撤销和恢复
命令 | 英文 | 功能 |
---|---|---|
u | undo | 撤销上次命令 |
CTRL + r | redo | 恢复撤销的命令 |
3.3 删除
命令 | 英文 | 功能 |
---|---|---|
x | cut | 删除光标所在字符,或者选中文字 |
d(移动命令) | delete | 删除移动命令对应的内容 |
dd | delete | 删除光标所在行,可以 ndd 复制多行 |
D | delete | 删除至行尾 |
- 可以和 移动命令 连用,以下是常见的组合命令:
dw
# 从光标位置删除到单词末尾d0
# 从光标位置删除到一行的起始位置d}
# 从光标位置删除到段落结尾ndd
# 从光标位置向下连续删除 n 行d代码行G
# 从光标所在行 删除到 指定代码行 之间的所有代码d'a
# 从光标所在行 删除到 标记a 之间的所有代码
3.4 复制、粘贴
vim中复制、删除的内容都会保存在缓冲区,且缓冲区只有一个。
命令 | 英文 | 功能 |
---|---|---|
y(移动命令) | copy | 复制 |
yy | copy | 复制一行,可以 nyy 复制多行 |
p | paste | 粘贴 |
- 命令
d
、x
类似于 剪切 - 命令
y
类似于 复制 - 命令
p
类似于 粘贴 - 在其他软件中使用
CTRL + C
复制的内容,不能在vi
中通过P
命令粘贴 - 可以在 编辑模式 下使用 鼠标右键粘贴
3.5 选中文本(可视模式)
- vi` 中提供了 三种 可视模式,可以方便程序员选择 选中文本的方式
ESC
切换到命令模式。
命令 | 模式 | 功能 |
---|---|---|
v | 可视模式 | 从光标位置开始按照正常模式选择文本 |
V | 可视行模式 | 选中光标经过的完整行 |
Ctrl + v | 可视块模式 | 垂直方向选中文本 |
- 可视模式下,可以和 移动命令 连用,例如:
ggVG
能够选中所有内容
3.6 查找
3.6.1 常规查找
命令 | 功能 |
---|---|
/str | 查找 str |
- 查找到指定内容之后,使用
Next
查找下一个出现的位置:
n
: 查找下一个N
: 查找上一个- 如果不想看到高亮显示,可以随便查找一个文件中不存在的内容即可
3.6.2 单词快速匹配
命令 | 功能 |
---|---|
* | 向后查找当前光标所在单词 |
# | 向前查找当前光标所在单词 |
- 在开发中,通过单词快速匹配,可以快速看到这个单词在其他什么位置使用过
3.7 替换
命令 | 英文 | 功能 | 工作模式 |
---|---|---|---|
r | replace | 替换当前字符 | 命令模式 |
R | 替换当前行光标后的字符 | 替换模式 |
R
命令可以进入 替换模式,替换完成后,按下ESC
可以回到 命令模式- 替换命令 的作用就是不用进入 编辑模式,对文件进行 轻量级的修改
3.8 查找并替换
- 在
vi
中查找和替换命令需要在 末行模式 下执行 - 记忆命令格式:
:%s///g
3.8.1 全局替换
- 一次性替换文件中的 所有出现的旧文本
- 命令格式如下:
:%s/旧文本/新文本/g
3.8.2 可视区域替换
- 先选中 要替换文字的 范围
- 命令格式如下:
:s/旧文本/新文本/g
3.8.3 确认替换
- 如果把末尾的
g
改成gc
在替换的时候,会有提示!推荐使用!
:%s/旧文本/新文本/gc
y
-yes
替换n
-no
不替换a
-all
替换所有q
-quit
退出替换l
-last
最后一个,并把光标移动到行首^E
向下滚屏^Y
向上滚屏
3.9 缩进和重复执行
命令 | 功能 |
---|---|
>> | 向右增加缩进 |
<< | 向左减少缩进 |
. | 重复上次命令 |
- 缩排命令 在开发程序时,统一增加代码的缩进 比较有用!
- 一次性 在选中代码前增加 4 个空格,就叫做 增加缩进
- 一次性 在选中代码前删除 4 个空格,就叫做 减少缩进
- 在 可视模式 下,缩排命令只需要使用 一个
>
或者<
在程序中,缩进 通常用来表示代码的归属关系
- 前面空格越少,代码的级别越高
- 前面空格越多,代码的级别越低
3.10 插入命令(6种方法进入编辑模式)
命令 | 英文 | 功能 |
---|---|---|
i | insert | 在当前字符前插入文本 |
I | insert | 在行首插入文本 |
a | append | 在当前字符后添加文本 |
A | append | 在行末添加文本 |
o | 在当前行后面插入一空行 | |
O (大写字母O) | 在当前行前面插入一空行 |
编辑命令和数字连用
-
在开发中,可能会遇到连续输入
N
个同样的字符 -
例如:
**********
连续 10 个星号
要实现这个效果可以在 命令模式 下
- 输入
10
,表示要重复 10 次 - 输入
i
进入 编辑模式 - 输入
*
也就是重复的文字 - 按下
ESC
返回到 命令模式,返回之后vi
就会把第2、3
两步的操作重复10
次
提示:正常开发时,在 进入编辑模式之前,不要按数字
利用 可视块 给多行代码增加注释
- 在开发中,可能会遇到一次性给多行代码 增加注释 的情况
在
Python
中,要给代码增加注释,可以在代码前增加一个#
要实现这个效果可以在 命令模式 下
- 移动到要添加注释的 第 1 行代码,按
^
来到行首 - 按
CTRL + v
进入 可视块 模式 - 使用
j
向下连续选中要添加的代码行 - 输入
I
进入 编辑模式,并在 行首插入,注意:一定要使用 I - 输入
#
也就是注释符号 - 按下
ESC
返回到 命令模式,返回之后vi
会在之前选中的每一行代码 前 插入#