目录
一、Vim 编辑器介绍
在了解 Vim 之前先要认识 Vi ——Vi 是一款诞生于20世纪70年代的文本编辑器,是 Unix 和 Linux 操作系统中最经典的一个编辑器。
而 Vim 就是从 Vi 发展出来的一个文本编辑器。Vim 功能强大、高度可定制,在 Vi 的基础上改进和增加了很多特性。
我们平时用的编辑器如Word,通常是 "图形化界面 + 鼠标 + 键盘" 的编辑器,使用灵活且功能齐全,可以调整字体、改变大小和颜色、进行文字排版等等。但 Vi 和 Vim 只是一个纯文本编辑器,工作在字符模式下,不需要图形界面和鼠标。
Vi 虽然没有Word之类的图形界面编辑器那样操作简单,但在系统管理、服务器管理字符界面中,拥有图形界面编辑器无法比拟的优势。Vim 编辑器也在程序员中被广泛使用,和 Emacs 并列为类Unix系统用户最喜欢的文本编辑器。
- 简单来说,Vim 就是一个不需要鼠标的编辑器,全键盘操作,大大提高工作效率。(不过前提是能熟练使用)
二、Vim 编辑器的 6 种基本模式
1、普通模式(Normal mode)
Vim 启动后默认为普通模式。普通模式下可以复制行、删除行等操作,但不能进行文本输入,也就是说 Vim 打开后并不能直接输入文本,需要先转换到插入模式才行。(像Word这样的编辑器打开默认就是插入模式,可以直接开始输入)
2、插入模式(Insert mode)
插入模式下按键会向文本缓存中插入文本,也就是说可以进行输入了。
3、命令行模式(Command line mode)
命令行模式下可以输入对应的命令,如保存、查找文本等等。命令执行之后,Vim 会返回命令行模式之前的模式。
4、可视模式(Visual mode)
可视模式与普通模式相似。可视模式下可以选择并高亮一段文本区域。高亮区域可以是字符、行或者是一块文本。可视模式下执行的命令会执行到选择的高亮区域上。
- 简单来说,就是可视模式下可以选择一段目标文本进行相关操作,就像按住鼠标左键选择一段文本,就能对这段文本进行相关操作。
5、选择模式(Select mode)
选择模式和无模式编辑器的行为比较相似(Windows 标准文本控件的方式)。选择模式中可以用鼠标或光标键高亮选择文本。在选择后输入任何字符,这个字符就会替换选择的区域,并进入插入模式。
6、Ex 模式(Ex mode)
Ex 模式和命令行模式相似,在使用 :visual 命令离开 Ex 模式前,可以一次执行多条命令。
- 以上所有模式常用的只有 3 种:普通模式、插入模式、命令行模式
三、常用模式切换
四、Vim 基本操作
01、进入 Vim / 打开文件
① 在终端输入以下指令,直接打开 vim 编辑器,但不会打开任何文件。
vim
进入 vim 后,切换命令行模式,输入以下指令,打开文件。
:e <filename>
② 在终端输入指令时直接加上文件名,就能进入 vim 并打开该文件。(若该文件不存在,则自动创建一个新文件)
vim <filename>
例:vim 1.txt
02、输入文本
- 普通模式下:
命令 | 说明 |
---|---|
i (小写) | 在当前光标处进行编辑 |
I(大写) | 光标移至行首进行编辑 |
a | 在当前光标后进行编辑 |
A | 光标移至行末进行编辑 |
o | 在当前行的后面插入一个新行进行输入 |
O | 在当前行的前面插入一个新行进行输入 |
cw | 删除从光标位置到行末的所有字符,并进入插入模式 |
03、移动光标
- 普通模式下:
命令 | 说明 |
---|---|
方向键 | 上下左右移动光标 |
h j k l | 上下左右移动光标 |
w | 移动到下一个单词(注意是单词而非字符) |
b | 移动到上一个单词 |
nG | 光标跳转到第 n 行开头 |
04、删除文本
- 普通模式下:
命令 | 说明 |
---|---|
x 或 delete | 删除光标所在的字符 |
X | 删除光标所在的前一个字符 |
dw 或 daw | 删除 1 个单词(适合英文) |
dnw | 删除 n 个单词 |
d$ 或 D | 从光标开始删除至行尾 |
d^ | 从光标开始删除至行首 |
dd | 删除所在行(实际上是剪切) |
ndd | 从所在行开始向下删除 n 行 |
dG | 从所在行开头向后删除到文档末尾 |
d1G | 从所在行开头向前删除到文档开头 |
05、重复命令
- 普通模式下:
命令 | 说明 |
---|---|
. | 重复执行上次命令 |
n<command> | 重复执行 n 次 command 命令 |
例:
10x 连续删除 10 个字符
3dd 连续删除 3 行
06、复制 / 剪切 / 粘贴
① 复制并粘贴
- 普通模式下:
操作 | 命令 | 说明 |
---|---|---|
复制 | y | 复制光标所在字符 |
yy | 复制光标所在行 | |
nyy | 从光标所在行开始向下复制 n 行 | |
y^ | 从光标所在位置复制到行首 | |
y$ | 从光标所在位置复制到行尾 | |
yw | 复制 1 个单词 | |
ynw | 复制 n 个单词 | |
yG | 从所在行开头向下复制到文档末尾 | |
y1G | 从所在行开头向下复制到文档开头 | |
剪切 | dd | 剪切光标所在行 |
粘贴 | p | 粘贴至光标后 |
P | 粘贴至光标前 | |
交换行 | ddp | 快速交换光标所在行与下面行 |
07、可视模式
- 普通模式下:
命令 | 说明 |
---|---|
v | 字符选择模式(再次按下 v 则取消选取) |
Shift + v | 行选择模式(再次按下 Shift + v 则取消选取) |
Ctrl + v | 区域选择模式(再次按下 Ctrl + v 则取消选取) |
- 可视模式下:
命令 | 说明 |
---|---|
d | 删除选取区域内容 |
y | 复制选取区域内容 |
08、替换文本
- 普通模式下:
命令 | 说明 |
---|---|
r<待替换字母> | 将光标所在字母替换为指定字母 |
R | 从光标所在字母开始连续替换(按 Esc 退出) |
cc | 替换光标所在行(即删除整行),并进入插入模式 |
cw | 替换 1 个单词(即删除 1 个单词),并进入插入模式 |
C | 替换从光标开始到行末(即删除),并进入插入模式 |
~ | 切换光标所在字母大小写 |
09、撤销
- 普通模式下:
命令 | 说明 |
---|---|
u | 撤销 1 次操作 |
nu | 撤销 n 次操作 |
U | 撤销所在行的所有操作 |
Ctrl + r | redo,撤销 undo 操作 |
10、保存文档
- 命令行模式下:
命令 | 说明 |
---|---|
:w | 保存文件 |
:w <filename> | 将文档另存为其它文件名 |
:w <文件路径> | 另存为 |
:saveas <文件路径> | 另存为 |
11、退出 vim
- 命令行模式下:
命令 | 说明 |
---|---|
:q | 退出 |
:q! | 强制退出(不保存) |
:wq 或 :x | 保存并退出 |
:wq! | 保存并强制退出 |
- 普通模式下:
shift + zz 保存并退出。
12、缩进
① 快速缩进
- 普通模式下:
命令 | 说明 |
---|---|
>> | 整行向右缩进 |
<< | 整行向左回退 |
② 修改缩进和回退的字符数 - shiftwidth
- 命令行模式下:
命令 | 说明 |
---|---|
:set shiftwidth? | 获取目前的 shiftwidth 设定值 |
:set shiftwidth=10 | 修改 shiftwidth 值为 10 个字符 |
13、调整文本位置
- 命令行模式下:
命令 | 说明 |
---|---|
:ce | 光标所在行文本居中 |
:ri | 光标所在行文本靠右 |
:le | 光标所在行文本靠左 |
14、查找
① 快速查找
- 普通模式下:
命令 | 说明 |
---|---|
f<待查找字符> | 查找光标后第一个目标字符(行内查找) |
/<待查找字符串> + 回车(如:/abc) | 向后查找目标字符串 |
?<待查找字符串> + 回车(如:?abc) | 向前查找目标字符串 |
n | 继续查找下一个目标字符串 |
N | 继续查找上一个目标字符串 |
- 命令行模式下:
命令 | 说明 |
---|---|
:noh | 取消查找 |
② 高级查找
- 普通模式下:
命令 | 说明 |
---|---|
\* | 向后查找光标处所在单词 |
\# | 向前查找光标处所在单词 |
g\* | 同 \* ,但只需部分符合单词 |
g\# | 同 \# ,但只需部分符合单词 |
n | 继续查找下一个目标字符串 |
N | 继续查找上一个目标字符串 |
15、多文件编辑
① 进入 vim 时直接打开多个文件
在终端输入以下命令,同时打开 1.txt 和 2.txt。(默认进入第一个文件编辑界面)
vim 1.txt 2.txt
② 切换文件
当前在 1.txt 文件,如果需要切换文件,命令行模式下输入:
命令 | 说明 |
---|---|
:n | 切换到 2.txt 文件 |
:n! | 强制切换(之前的文件不会保存) |
:N | 切换到 1.txt 文件 |
:N! | 强制切换(之前的文件不会保存) |
:e 3.txt | 打开新文件 3.txt |
:e# | 回到前一个文件 |
:ls | 列出当前编辑过的文档 |
:b 2.txt | 直接进入 2.txt 进行编辑 |
:bd 2.txt | 删除以前编辑过的列表中的文件项目 |
:e! 4.txt | 打开新文件 4.txt,放弃正在编辑的文件 |
:f | 显示正在编辑的文件名 |
:f new.txt | 修改正在编辑的文件名为 new.txt |
16、恢复文件
如果文档未保存意外退出,可以通过交换文件恢复(swp、swn、swm…)
vim 在编辑的时候会自动在当前文件目录下生成一个交换文件,通常为 <filename>.swp 格式。(交换文件的更新和对应文件的更新不是实时的)
例如:1.txt 文件意外关闭
① 进入 vim
② 进入命令行模式,输入以下命令恢复文件:
:recover 1.txt
17、视窗操作
vim 可以在一个界面里打开多个窗口进行编辑,这些编辑窗口称为 vim 的视窗。
- 命令行模式下:
命令 | 说明 |
---|---|
:new | 打开一个新的视窗 |
:sp 1.txt | 打开一个新的水平分屏视窗编辑 1.txt |
:vsp 1.txt | 打开一个新的垂直分屏视窗编辑 1.txt |
- 普通模式下:
命令 | 说明 |
---|---|
Ctrl + w + s | 将当前窗口分割成两个水平的窗口 |
Ctrl + w + v | 将当前窗口分割成两个垂直的窗口 |
Ctrl + w + o | 打开一个视窗并且隐藏之前的所有视窗 |
Ctrl + w + j | 移至下面视窗 |
Ctrl + w + k | 移至上面视窗 |
Ctrl + w + h | 移至左面视窗 |
Ctrl + w + l | 移至右面视窗 |
Ctrl + w + J | 将当前视窗移至下面 |
Ctrl + w + K | 将当前视窗移至上面 |
Ctrl + w + H | 将当前视窗移至左面 |
Ctrl + w + L | 将当前视窗移至右面 |
Ctrl + w + - | 减小视窗的高度 |
Ctrl + w + + | 增大视窗的高度 |
…… | …… |
18、文档加密
在终端输入以下命令创建加密文档。输入密码、确认密码,这样下次打开这个文档时就需要输入密码了。
vim -x file
19、在 vim 执行外部命令
在 vim 的命令行模式下输入 ! 即可执行外部的 shell 命令。
命令 | 说明 |
---|---|
:!ls | 显示当前目录下的内容 |
:rm filename | 删除名为 filename 的文件 |
…… | …… |
20、帮助系统
- 普通模式下:
命令 | 说明 |
---|---|
F1 | 打开 vim 预设的帮助文档 |
- 命令行模式下:
命令 | 说明 |
---|---|
:h shiftwidth | 打开名为 shiftwidth 的帮助文档 |
:ver | 显示版本以及参数 |
21、功能设定
在编辑文件的时候可以进行功能设定。但退出 vim 后设定值不会保存,下次打开会恢复默认。如果想要永久保存配置数据,可以修改 vim 配置文件 vimrc 。
① 获取当前的设定值
- 命令行模式下:
命令 | 说明 |
---|---|
:set 或 :se | 显示所有修改过的配置 |
:set all | 显示所有的设定值 |
:set <option>? | 显示 option 的设定值 |
:set nooption | 取消当前的设定值 |
② set 功能说明
- 命令行模式下:
命令 | 说明 |
---|---|
:set autoindent 或 set ai | 设置自动缩进 |
:set autowrite 或 set aw | 设置自动存档,默认关闭 |
:set background=dark 或 light | 设置背景风格 |
:set backup 或 set bk | 设置自动备份,默认关闭 |
:set cindent 或 set cin | 设置 C 语言风格缩进 |
:set nu | 显示行数 |