1. 先把这个老古董的底层逻辑讲透
如果你问一个老运维或者后端开发,工作中最离不开的编辑器是什么,十有八九会得到一个答案:VI(或者它的增强版VIM)。这玩意儿从1976年诞生到现在,外观几乎没怎么变过,黑底白字,没有菜单,没有按钮,第一次打开甚至不知道怎么退出。但就是这样一个“老古董”,在服务器上、在Docker容器里、在远程开发环境中,依然是无可替代的存在。
很多新手第一次进VI会觉得莫名其妙——为什么打开文件后敲的字不显示?为什么光标动得那么别扭?为什么按个方向键都会跳出ABCD?这些困惑的根源在于,VI和你平时用的记事本、Word、VS Code完全是两种物种。记事本是“输入型编辑器”,你敲什么就显示什么;VI是“命令型编辑器”,它有自己独立的一套模式体系。
VI的核心设计理念是:让手不离开键盘主区域就能完成所有操作。在图形界面时代听上去很落后,但当你在没有鼠标、没有图形界面的Linux服务器终端里修改配置时,这套设计就成了效率神器。VI的创造者Bill Joy当年是为了在带宽极低的慢速终端上编辑文件,每传一个字符都要钱,于是他把光标移动、删除、翻页这些高频操作浓缩成单个按键,形成了一套独立的“编辑语言”。
所以在VI上,第一个要破除的思维定式是:VI不是用来“打字”的,而是用来“操作文本”的。它的常态模式叫Normal模式(普通模式),在这个模式里,你的每个按键都是一个命令,比如j代表向下移动一行,w代表跳到下一个词,dd代表删除整行。只有当你明确进入Insert模式(插入模式)后,键盘才回归打字功能。
把这一点想通了,VI的学习路径就清晰了:先用命令控制光标和文本,把它想象成你在“驾驶”编辑器,而不是在“与之对话”。我见过很多人学了两三年还是只会用i进入插入然后方向键移动,到最后按ESC退出来都不知道怎么保存退出,这就是没有在意识层面完成转换。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件操作与光标移动:先打通最常用的肌肉记忆
2.1 打开、保存与退出:四个命令必须背下来
VI的打开命令很简单,在终端里输入:
bash复制vi 文件名
如果文件存在就打开,不存在就新建。但打开之后才是重头戏。很多人的第一个坎就是:怎么保存、怎么退出。我总结了一个四命令对照表,初学者建议贴在显示器边上看两天:
| 场景 | 命令 | 说明 |
|---|---|---|
| 保存但不退出 | :w |
写入磁盘 |
| 退出不保存 | :q! |
强制退出,放弃所有修改 |
| 保存并退出 | :wq |
等价于 ZZ(大写) |
| 强制保存退出 | :wq! |
只读文件需要加感叹号 |
注意,这四个命令是在Normal模式下按 : 进入命令行模式来执行的,按下冒号后输入内容不会出现在文件里,而是出现在屏幕最底部。
我在现实里遇到最多的问题是:用户进了VI后想退出,按了ESC但系统发出“嘀”的一声,然后一脸懵。这里有个技巧——如果你不确定目前处于什么模式,连按两次ESC一定能回到Normal模式。再小一点说,VI的退出命令设计成 q 是有讲究的,它是Quit的首字母,逻辑清晰。之所以还要区分 :q 和 :q!,是因为VI默认保护未保存的修改,没有 ! 是不让你放弃退出,这其实是个防呆设计,避免你辛辛苦苦打了半天不小心全丢了。
2.2 光标移动:从逐字到逐屏的完整阶梯
光标移动是VI操作频率最高的动作,也是最需要形成肌肉记忆的部分。新手最大的误区是进入VI后先用方向键移动,然后再看屏幕。方向键在VI里也能用(取决于终端支持情况),但效率低,而且换到某些环境或精简版VI下就会失灵。真正好用的方式是用 hjkl 四个字母:
h:左移一个字符j:下移一行k:上移一行l:右移一个字符
为什么偏偏选这四个键?答案很简单:在标准键盘上,h 在最左边,l 在最右边,j 下方有个小凸起帮助盲定位,它们占据了右手食指和中指的天然位置,几乎不用移动手腕就能触达。
字符级移动显然是慢的,因此Vi提供了大量“跳级”命令,效率和移动尺度直接挂钩:
| 按键 | 移动尺度 | 实际效果 |
|---|---|---|
w |
到下一个单词开头 | 按词跳,快很多 |
b |
回到上一个单词开头 | 配合w前进/后退 |
e |
跳到当前词尾 | 适合快速定位到行的末尾部分 |
0 |
到行首 | 不带前导空格 |
^ |
到行首 | 跳过一个或多个空格/制表符,到当前行第一个内容字符 |
$ |
到行尾 | shift+4 |
gg |
到文件第一行 | 连按两次g |
G |
到文件最后一行 | shift+g |
H |
屏幕顶部 | 记忆点是Home的缩写 |
M |
屏幕中部 | Middle |
L |
屏幕底部 | Last |
Ctrl+d |
下滚半屏 | 记忆是Down |
Ctrl+u |
上滚半屏 | Up |
Ctrl+f |
下滚整屏 | For |
