一、移动光标
字符级
| 命令 | 功能 |
|---|---|
| h | 向 左 移动一个字符单位 |
| l | 向 右 移动一个字符单位 |
| j | 向 下 移动一个字符单位 |
| k | 向 上 移动一个字符单位 |
单词级
| 命令 | 功能 |
|---|---|
| w/W | 向 右 移动到下一单词开头 |
| e/E | 向 右 移动到单词结尾 |
| b/B | 向 左 移动到单词开头 |
PS:所谓“单词”,是按照英文的书写和使用习惯来定义的。用在中文上,一般就会以标点符号和空格作为“单词”的界限。所以常常是一句话一句话地跳转。
块级
| 命令 | 功能 |
|---|---|
| 0 | 移动到当前行的第一个字符 |
| ^ | 移动到当前行第一个非空白字符 |
| $ | 移动到当前行行尾 |
| + | 移动到下一行的首字母 |
| - | 移动到上一行的首字母 |
| gg | 移动到文档第一行 |
| G | 移动到文档最后一行 |
| H | 移动到当前屏幕的第一行 |
| M | 移动到当前屏幕的中间一行 |
| L | 移动到当前屏幕的最后一行 |
| : |
跳转到第 n 行 |
| :+ |
从当前位置向下跳 n 行 |
| :- |
从当前位置向上跳 n 行 |
滚动屏幕
| 命令 | 功能 |
|---|---|
| Ctrl-d | 向下滚动半页 |
| Ctrl-u | 向上滚动半页 |
| Ctrl-f | 向下移滚动一页 |
| Ctrl-b | 向上滚动一页 |
| z |
将当前行滚动到屏幕顶部 |
| z. | 将当前行滚动到屏幕中间 |
| z- | 将当前行滚动到屏幕底部 |
PS:绝大部分命令前都可以加一个数字 n ,通常表示对其后的命令连续执行 n 次。所以 3j 可以表示向下移动 3 个字符单位(即下移 3 行)。3l 表示向右移动 3 个字符单位。相当于连续执行了 l 命令 3 次。
而 9z. 则表示光标移动到第 9 行的同时,滚动屏幕并使得第 9 行位于屏幕中间。(这个 9 的含义不同于 3l 命令中的 3)
前面带冒号的命令(如 :+<n>,命令内容会显示在底部)是需要手动输入回车后才执行的。而不带冒号的命令(如 <n>gg)需要在键盘上不间断地按下,之后命令会自动执行。
二、文档操作

插入
| 命令 | 功能 |
|---|---|
| i | 当前字符前插入 |
| a | 当前字符后插入 |
| I | 行首插入 |
| A | 行尾插入 |
| o | 在下一行插入 |
| O | 在上一行插入 |
PS:以上命令会使 vim 进入 insert 模式(即编辑模式),此时输入的任何命令都会作为字符插入到文档中。
按 esc 键可退出 insert 模式。
删除(并将删除的内容保存至 vim 剪贴板)
| 命令 | 功能 |
|---|---|
| x | 删除当前字符(等于 insert 模式下的 Delete) |
| X | 删除前一个字符(等于 insert 模式下的 Backspace) |
| dd | 删除当前行 |
| d |
删除指定内容 |
| D | 删除当前光标位置到行尾的所有内容。等于 d$ |
| cc | 替换整行内容。即将整行内容删除并进入 insert 模式 |
| c |
删除指定内容后,进入 insert 模式。相当于 d<x>a |
| C | 替换当前光标位置到行尾的所有内容。等于 c$ |
如 j 表示将光标向下移动一个字符单位(即下移一行),则 dj 表示删除当前行和下一行的内容。G 表示将光标移动到文档末尾,则在光标定位在文档首行时,使用 dG 命令可以清空整个文档的内容。
PS:使用以上命令删除的内容会自动保存到 vim 的剪贴板中,即所谓“删除”实际上是“剪切”,使用 p 命令即可粘贴删除的内容。而且该剪贴板限于 vim 内部,不是系统剪贴板。
复制与粘贴
| 命令 | 功能 |
|---|---|
| yy | 复制当前内容到 vim 剪贴板 |
| y |
复制指定内容到 vim 剪贴板 |
| p | 在当前位置后粘贴 |
| P | 在当前位置前粘贴 |
| J | 将当前行与下一行内容合并为一行 |
y<x> 命令中的 <x> 同样用于指定复制的范围。
如 4j 表示将光标下移 4 行,则 y4j 表示将当前行及其后 4 行内容复制到 vim 剪贴板。8gg 表示将光标定位至第 8 行,则 y8gg 表示复制当前行到第 8 行的所有内容。
当 vim 剪贴板中的内容为整行时,则粘贴命令(p/P)执行时,也会变成在当前行的前(后)一行粘贴。
查找
行内查找
| 命令 | 功能 |
|---|---|
| f |
当前行向行尾方向查找并定位到字符 x |
| F |
当前行向行首方向查找并定位到字符 x |
| t |
当前行向行尾方向查找并定位到字符 x 之前 |
| T |
当前行向行首方向查找并定位到字符 x 之后 |
| ; | 继续向当前方向查找下一个字符 |
| , | 向当前方向的相反方向查找下一个字符 |
文档内查找
| 命令 | 功能 |
|---|---|
| * | 向后查找光标当前所在单词 |
| # | 向前查找光标当前所在单词 |
| / |
向后查找指定字符串或模式 |
| ? |
向前查找指定字符串或模式 |
| n | 继续查找下一个(依照原方向继续查找) |
| N | 继续查找上一个(依照原方向进行反向查找) |
PS:vim 中可使用 % 对括号 ()[]{} 进行匹配查找,当光标位于其中一个符合上时,按下 % 会跳转到与之匹配的另外一个符合上。
替换
| 命令 | 功能 |
|---|---|
| r |
将当前字符替换为字符 x |
| s | 删除当前字符并进入 insert 模式 |
| R | 进入 replace 模式,逐字对当前字符进行替换操作,可以移动光标定位需要替换的字符。直到按下 ESC 键退出该模式 |
| ~ | 对当前字符进行大小写切换(即大写转小写,小写转大写) |
| gu |
将指定的文本转换为小写 |
| gU |
将指定的文本转换为大写 |
| g~ |
将指定文本进行大小写切换 |
| : |
以某个模式(pattern)检索整个文档,并将第 n1 行到第 n2 行中的匹配项替换为指定内容(replace) |
| :%s/ |
以某个模式(pattern)检索整个文档并将匹配项替换为指定内容(replace)。等同于 :1,$s/ |
PS::%s/<pattern>/<replace> 命令中的 :%s/<pattern>/<replace>/g 命令


撤销、重做
| 命令 | 功能 |
|---|---|
| . | 重复执行上一次的命令 |
| u | 撤销 |
| U | 撤销对当前行的所有操作 |
| Ctrl-r | 重做 |
打开、关闭文档
| 命令 | 功能 |
|---|---|
| :e |
打开名为 filename 的文件,如文件不存在则创建 |
| :Ex | 在 vim 中打开目录树,光标选定后回车打开对应文件(- 命令进入上级目录) |
| :w | 保存当前文件 |
| :wa | 保存全部文件 |
| :wq 或 ZZ | 保存文件并退出 vim |
| :q! 或 ZQ | 强制退出 vim ,不保存文件 |
| :r |
读入另一个文档(filename)的数据,并将其内容附加到当前文档光标所在行的后面 |
| :saveas <new_filename> | 文件另存为 |
| :w <new_name> | 另存为一份名为 new_name 的副本并继续编辑原文件 |
| : |
将 n1 行到 n2 行的所有内容保存到名为 new_name 的新文档中 |
Buffer
Buffer(缓冲区)指 vim 中打开的文件所占的内存空间,当未写入磁盘时,所有的修改都发生在内存中。vim 打开过的每个文件都会放到一个 Buffer 中,可以随意切换已打开的 Buffer。
| 命令 | 功能 |
|---|---|
| :ls 或 :buffers | 查看 buffer 列表 |
| :bn | 打开缓冲区中下一个文件 |
| :bp | 打开缓冲区中上一个文件 |
| :b |
打开缓冲区中第 n 个文件 |
| :bdelete |
删除需要关闭的缓冲区文件 |


三、其他技巧
缩进
>>向右缩进当前行<<向左缩进当前行4>>向右缩进当前行的同时,缩进当前行下面的 3 行内容>G向右缩进当前行到文档末尾的所有内容自动排版
==自动排版当前行gg=G自动排版整个文档<n>==对从当前行开始的 n 行进行自动排版=<n>j对当前行以及下面的 n 行进行自动排版执行 shell 命令
:!<command>可以执行相应的 shell 命令,命令执行完成后按Enter回到 vim 界面。
如使用:1,9!sort命令可以将当前文件中第 1 行到第 9 行的内容重新排序。:r !<command>可以将相应 shell 命令执行后的输出读取到当前文件中。
如使用:r !date命令可以将当前详细的时间日期插入到 vim 编辑的文件中。四、分屏与标签页

窗口分屏
- 分屏方式
:split或:sp或Ctrl-w s:上下分屏:vsplit或:vs或Ctrl-w v`:左右分屏:diffsplit或:diffs:diff 模式打开一个分屏,后面可以加<filename>
- 窗口跳转
Ctrl-w w:激活下一个窗口Ctrl-w j:激活下方窗口Ctrl-w k:激活上方窗口Ctrl-w h:激活左侧窗口Ctrl-w l:激活右侧窗口
- 屏幕缩放
Ctrl-w =:平均窗口尺寸Ctrl-w +:增加当前窗口高度Ctrl-w -:缩减窗口高度Ctrl-w _:最大窗口高度Ctrl-w >:增加窗口宽度Ctrl-w <:缩减窗口宽度Ctrl-w |:最大窗口宽度
标签页
- 创建标签页
:tabnew或:tabedit或:tabe:打开新标签页
该命令包括上面的分屏命令(:sp或:vs等)后面都可以跟<filename>选项,用以在新标签页(或窗口)中打开指定文件 - 切换标签页
gt或:tabnext或:tabn:切换到下一个标签页(最后一个会循环到第一个)gT或:tabprevious或:tabp:切换到上一个标签页:tabrewind或:tabr或:tabfir:切换到第一个标签页:tablast或:tabl:切换到最后一个标签页
- 关闭标签页
:tabclose或:tabc:关闭当前标签页:-tabc:关闭上一个标签页:+tabc:关闭下一个标签页:tabonly或:tabo:关闭其他标签页
附录:vim 模式介绍
大致上 vim 分为三种模式,分别是命令模式(Command mode),编辑模式(Insert mode)和底线命令模式(Last line mode)。
1. 命令模式
vim 启动即进入命令模式。此时敲击键盘动作会被识别为命令,而不是作为字符插入到文档中。如:
i切换到输入模式(在当前字符前插入):切换到底线命令模式,此时输入的命令显示在最底下一行, : 符号后面
命令模式下只有一些最基本的命令,而底线命令模式下拥有更多的命令。2. 编辑模式
在命令模式下键入i(或a、e等)即进入编辑模式
在编辑模式下,可以像在记事本中那样,使用键盘输入或修改文档内容。注意编辑完成时,可使用ESC键退出编辑模式,回到命令模式。3. 底线命令模式
在命令模式下按下:即进入底线命令模式
该模式下可以输入单个或多个字符的命令,以完成比命令模式下更复杂的操作(如:wq保存文件并退出)
按ESC键可随时退出底线命令模式。