Linux vi/vim 编辑器:零基础也能看懂的入门指南
很多刚学 Linux 的小伙伴觉得 vi/vim 编辑器难,其实是没摸透它的 “套路”。这篇文章将用最直白的话讲清 vi/vim 怎么用,每个步骤都带例子,零基础也能一步一步跟着学。
一、先搞明白:vi 和 vim 到底是啥?
vi\vim是visual interface的简称,是Linux中最经典的文本编辑器,同图形化界面中的文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。简单说,vi/vim 就是 Linux 里的 “记事本”,专门用来编辑文本 —— 比如改系统配置、写脚本。
- vi:Linux 自带的老版本 “记事本”,功能基础但够用;
- vim:vi 的升级版,多了语法高亮(比如写代码时关键字会变色)、代码补全等功能,现在 Linux 里输
vi命令,其实默认打开的是 vim。
不管用 vi 还是 vim,操作逻辑都一样,咱们下面统一叫 “vim”。
二、核心中的核心:vim 的 3 种工作模式
这是学好 vim 的关键!刚开始会觉得绕,但记住 “按 Esc 键能回到命令模式”,就不会慌了。先看张模式切换图,理解起来更直观:vim 三种模式的切换关系

1. 命令模式(打开就进,默认模式)
双击打开记事本会直接让你写字,但 vim 不一样 —— 打开文件后,默认进入 “命令模式”,这时按键盘不会输入文字,而是执行命令(比如移动光标、复制粘贴)。所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。此模式下,不能自由对文本进行编辑。
怎么进命令模式?
终端输vim 文件名就行,比如想编辑一个叫test.txt的文件,就输:
vim test.txt - 如果
test.txt不存在,会新建这个文件; - 如果文件存在,就打开已有的文件。
命令模式必学快捷键(带例子,一看就会)
这些是日常最常用的,记几个高频的就行,不用贪多:
| 功能 | 快捷键 | 例子说明 |
|---|---|---|
| 光标移动(上下左右) | h/j/k/l | 按j光标向下动 1 行,比按方向键快 |
| 跳转到文件首行 | gg | 不管光标在哪,按gg直接到第一行 |
| 跳转到文件尾行 | G(大写) | 按G直接到最后一行 |
| 复制当前行 | yy | 按yy,当前行内容就被 “复制” 了 |
| 粘贴复制的内容 | p(小写) | 复制后按p,内容粘在光标下一行 |
| 删除当前行 | dd | 按dd,当前行就被 “删掉” 了 |
| 撤销上一步操作 | u | 删错了?按u就能恢复 |
比如你想复制第 3 行,粘到第 5 行下面:
- 按
3G跳转到第 3 行; - 按
yy复制这行; - 按
5G跳转到第 5 行; - 按
p粘贴,内容就到第 6 行了。
2. 输入模式(要写字,先切这个模式)
命令模式不能输入文字,想写字就得切到 “输入模式”。
怎么切到输入模式?
在命令模式下按下面这些键,按完后屏幕左下角会出现 “INSERT” 或 “插入” 字样,就说明能写字了:
| 快捷键 | 效果 | 什么时候用? |
|---|---|---|
| i | 光标在哪,就从哪开始写 | 想在光标位置补字时 |
| a | 从光标下一个字符开始写 | 想在光标后加字时 |
| o | 在光标所在行下面新建一行写 | 想另起一行写内容时 |
比如你光标在 “hello” 的 “e” 上面:
- 按
i,输入 “x”,会变成 “hxello”; - 按
a,输入 “x”,会变成 “hexllo”; - 按
o,会在下面新起一行,直接能写。
怎么退回命令模式?
写完字想执行复制、删除这些命令,得先退回到命令模式 ——不管在输入模式下按什么,按一下 Esc 键就回去了。
3. 底线命令模式(保存、退出用这个)
想保存文件、退出 vim,就得用 “底线命令模式”,这个模式是从命令模式切过来的。
怎么切到底线命令模式?
在命令模式下按:(冒号),这时屏幕左下角会出现一个:,就可以输命令了。
底线命令模式必学命令(就记这几个,够用)
| 命令 | 效果 | 注意事项 |
|---|---|---|
| :w | 保存文件,但不退出 vim | 写完内容先按 Esc,再输:w保存 |
| :q | 退出 vim | 没保存文件时,用这个会报错 |
| :q! | 强制退出,不保存修改 | 写错了不想保存,就用这个 |
| :wq | 保存文件并退出 vim | 最常用的,写完直接保存退出 |
比如你编辑完test.txt:
- 按 Esc 退到命令模式;
- 按
:,输:wq,按回车,就保存并退出了;如果不想保存,就输:q!,按回车强制退出。
三、新手必避的坑 + 实用小技巧
1. 最容易犯的错:模式搞混
刚学的时候经常会在命令模式下直接写字(按了半天没反应),或者在输入模式下按复制命令(结果全变成乱码)。记住:不管什么时候,操作没反应就先按 Esc 退到命令模式,再重新来。
2. 实用小技巧(能省很多时间)
- 显示行号:在命令模式下输
:set nu,屏幕左边就会显示行号,找内容更方便;想关掉行号就输:set nonu。 - 查找内容:在命令模式下输
/关键词(比如/hello),按回车就能找到文件里所有 “hello”,按n跳下一个,按N跳上一个。 - 批量删除:比如想删第 5 到第 10 行,在命令模式下按
5G跳第 5 行,再按5dd(5 是行数,dd 是删行),就能删掉 5 行(第 5 到第 10 行)。
四、小试牛刀
跟着做一遍,马上就有感觉了:
- 打开终端,输
vim test.txt(新建并打开 test.txt); - 按
i进入输入模式,输入 “我在学 vim 编辑器”; - 按 Esc 退到命令模式,按
:w保存(这时没退出,还能继续写); - 按
o在下面新起一行,输入 “跟着 PPT 学,不难!”; - 按 Esc 退到命令模式,按
:wq保存并退出; - 输
cat test.txt,就能看到刚才写的内容了。
五、总结:记住这 3 点,vim 就入门了
- 打开 vim 先在命令模式,想写字切输入模式(按 i/a/o),想保存退出切底线命令模式(按:);
- 不管在哪,按 Esc 能回到命令模式,这是 “救命键”;
- 先记高频命令(比如 yy 复制、dd 删除、:wq 保存退出),用多了自然就熟了。
刚开始可能会忘命令,没关系,把这篇文章存起来,用到的时候翻一翻,练个两三次就能上手了!
六、命令模式以及底线命令模式扩展
1.vi/vim 命令模式快捷键大全
| 功能分类 | 快捷键 | 功能描述 |
|---|---|---|
| 模式切换与输入 | i | 在光标当前位置进入输入模式 |
| a | 在光标当前位置之后进入输入模式 | |
| I | 在当前行的开头进入输入模式 | |
| A | 在当前行的结尾进入输入模式 | |
| o | 在当前光标下一行进入输入模式 | |
| O | 在当前光标上一行进入输入模式 | |
| r | 替换光标所在位置的单个字符 | |
| R | 进入连续替换模式(按 Esc 退出) | |
| s | 删除光标所在字符并进入输入模式 | |
| cw | 删除当前单词并进入输入模式(修改单词) | |
| cc | 删除当前行并进入输入模式(重写行) | |
| 光标移动 | h / 左箭头 | 向左移动 1 个字符 |
| j / 下箭头 | 向下移动 1 行 | |
| k / 上箭头 | 向上移动 1 行 | |
| l / 右箭头 | 向右移动 1 个字符 | |
| 0(数字零) | 移动光标到当前行的开头 | |
| $ | 移动光标到当前行的结尾 | |
| ^ | 跳转到当前行第一个非空字符 | |
| w | 跳至下一个单词的开头 | |
| W | 跳至下一个单词开头(忽略特殊符号) | |
| b | 跳至上一个单词的开头 | |
| B | 跳至上一个单词开头(忽略特殊符号) | |
| gg | 跳至文件首行 | |
| G(大写) | 跳至文件尾行 | |
| nG(n 为数字) | 跳至文件第 n 行 | |
| H | 跳至当前屏幕顶部行 | |
| M | 跳至当前屏幕中间行 | |
| L | 跳至当前屏幕底部行 | |
| Ctrl+u | 向上翻半屏 | |
| Ctrl+d | 向下翻半屏 | |
| Ctrl+f | 向下翻一整屏 | |
| Ctrl+b | 向上翻一整屏 | |
| PageUp(PgUp) | 向上翻页 | |
| PageDown(PgDn) | 向下翻页 | |
| 文本复制 / 剪切 / 删除 | yy | 复制光标所在行 |
| nyy(n 为数字) | 复制当前行及下方共 n 行 | |
| y0 | 从光标位置复制到当前行首 | |
| y$ | 从光标位置复制到当前行尾 | |
| yw | 复制从光标开始的整个单词 | |
| dd | 删除(剪切)光标所在行 | |
| ndd(n 为数字) | 删除当前行及下方共 n 行 | |
| d0 | 从光标位置删除到当前行首 | |
| d$ | 从光标位置删除到当前行尾 | |
| dw | 删除从光标开始的整个单词 | |
| dW | 删除整个单词(忽略特殊符号) | |
| db | 删除到上一个单词的开头 | |
| dG | 从当前行删除到文件末尾 | |
| dgg | 从当前行删除到文件开头 | |
| x | 删除光标所在位置的字符 | |
| X(大写) | 删除光标前一个字符 | |
| J(大写) | 将当前行与下一行合并(删除换行符) | |
| 粘贴与撤销 | p(小写) | 将复制 / 剪切的内容粘贴到光标下一行 |
| P(大写) | 将复制 / 剪切的内容粘贴到光标上一行 | |
| u | 撤销上一步操作 | |
| Ctrl+r | 反撤销(恢复被撤销的操作) | |
| .(点号) | 重复上一次的操作 | |
| 查找与替换 | / 关键词 | 从光标位置向下查找关键词 |
| ? 关键词 | 从光标位置向上查找关键词 | |
| n(小写) | 跳至下一个匹配的查找结果 | |
| N(大写) | 跳至上一个匹配的查找结果 | |
| *(星号) | 向下查找当前光标所在的单词 | |
| #(井号) | 向上查找当前光标所在的单词 |
2.vi/vim 底线命令模式命令大全
| 功能分类 | 命令 | 功能描述 |
|---|---|---|
| 文件保存与退出 | :w | 保存文件(不退出) |
| :q | 退出 vim(文件未修改时) | |
| :q! | 强制退出,放弃所有修改 | |
| :wq / :x | 保存文件并退出 | |
| ZZ(大写) | 快捷键保存并退出(无需输入冒号) | |
| 显示与设置 | :set nu | 显示行号 |
| :set nonu | 隐藏行号 | |
| :set paste | 开启粘贴模式(解决粘贴乱码) | |
| :set fileencoding=utf-8 | 设置文件编码为 UTF-8 | |
| 查找与替换 | :s / 旧内容 / 新内容 | 替换当前行第一个匹配项 |
| :s / 旧内容 / 新内容 /g | 替换当前行所有匹配项(g = 全局) | |
| :% s / 旧内容 / 新内容 /g | 替换整个文件所有匹配项(%= 全文) | |
| :n1,n2s / 旧内容 / 新内容 /g | 替换第 n1 行到第 n2 行的所有匹配项 | |
| 其他实用命令 | :! 命令 | 执行 Linux 外部命令(不退出 vim),如:!ls |
| :recover | 恢复意外关闭的文件内容 |