1. 先从最难的一步说起:移动、编辑与保存退出
如果你第一次打开 Vim 就卡在“怎么退出”这个问题上,别怀疑自己,这几乎是每个新手的必经之坎。Vim 不是那种打开就能瞎敲的编辑器,它要先懂“模式”,再谈操作。第一次用 Vim 的人最容易犯的错,就是进入后拼命敲字符,却发现屏幕上什么都没发生,以为是死机,最后只能关掉终端重来。实际上,Vim 这款编辑器最核心的设计理念就是:让手尽量不离开键盘,用命令代替鼠标完成一切文本操作。而代价就是,你要先花一点点时间理解它那套和普通编辑器完全不同的操作逻辑。
我在刚接触 Vim 前半年,其实投入了很多时间,却只有迷糊的理解。直到后来把高频命令拆成“移动 / 编辑 / 保存”三类,再逐一做成肌肉记忆,才算真正入了门。这一章节就是把你需要的最基础、最高频的命令一次性捋清楚,不是教你怎么应付面试,而是让你在真实写代码时能顺畅用起来。
1.1 不要被“模式”吓住,先理解它在想什么
很多人一打开 Vim 就急着敲代码,这是观念上的误区。普通编辑器相当于汽车一直挂在 D 挡,你踩油门就走;Vim 则更像手动挡,你得根据场景换挡。Vim 有几种基础模式:
- Normal 模式(普通模式):Vim 启动后默认在这个模式,这里不适合直接录入文字,而是用来执行命令的,比如删除、复制、跳转。
- Insert 模式(插入模式):在这个模式下你才能像用记事本一样输入文字,按
i、a、o等键可以从普通模式进入该模式。 - Visual 模式(可视模式):类似于在其他编辑器里用鼠标选中一段文字,按
v进入,按Shift+v可以按行选择,按Ctrl+v可以按块选择。 - Command-line 模式(命令行模式):输入冒号
:进入,用于执行保存、退出、查找替换等更复杂操作。
刚上手时不用把所有模式都搞透,只需要记住:日常写代码就在 Normal 和 Insert 两个模式之间来回切。Normal 模式下当指挥官,Insert 模式下当打字员。这个观念一旦转变,后面所有命令都会变得顺理成章。
提醒一句:退出 Insert 模式,默认是
Esc键。很多人觉得远,但相信我,随着你使用频率增加,这个距离感会消失。如果实在觉得Esc不顺手,可以后续在配置里把jj映射成退出插入模式,不过那属于后话。
1.2 高频命令手册:先背下这一屏再谈效率
如果说模式是 Vim 的灵魂,那移动命令就是它的基本功。我之前带过几个新人,给他们的第一个任务都不是写业务,而是连续一周用 Vim 阅读项目代码,不许碰鼠标。一周后,他们再看代码时的定位速度已经能甩开用鼠标拖滚动条的老同事一大截。这说明移动命令的价值远远不只是少移动几次手,而是改变你浏览代码的方式。
移动命令要分层次掌握:
字符级移动:在 Normal 模式下,h 向左、l 向右、j 向下、k 向上,这四颗键在手,你就能彻底告别方向键。因为方向键在键盘右手区,每次伸手去够都要打乱击键节奏,而 hjkl 就在你的右手基准键位上,几乎是零成本移动。
单词级移动:w 跳到下一个单词开头,b 回退到上一个单词开头,e 跳到当前或下一个单词结尾。选一个长变量名试试,比如 total_row_count,用 w 在单词间跳转,你会发现从“逐字母移动”进化成“逐词移动”后,阅读速度是质的飞跃。
行级移动:0 跳到行首,^ 跳到行首第一个非空格字符,$ 跳到行尾。在写代码时我用的最多的是 ^,因为经常需要快速在缩进后的第一个代码字符处做插入,而 0 更多用于行首复制场景。
文件级移动:gg 跳到文件第一行,G 跳到最后一行,Ctrl+d 向下翻半页,Ctrl+u 向上翻半页。如果你知道要去第 50 行,直接输入 50G 即可,这比在 IDE 里拖滚动条精准得多。
搜索定位:输入 /keyword 然后回车,就能从上往下搜索关键字,按 n 跳到下一个匹配项,按 N 跳回上一个。光标放在某个单词上按 *,会直接向后搜索当前单词,这在查函数定义时非常高效。
编辑命令的核心则围绕“先删除后插入”的思维:
x删除光标所在字符,相当于其他编辑器的 Delete。dd删除光标所在整行,这是高频中的高频。5dd表示从当前行开始往下删 5 行。dw删除一个单词,d$删除从光标到行尾的内容。yy复制当前行,p粘贴到下一行,P粘贴到上一行。u撤销,Ctrl+r重做,这两个不用多说。
我把最常用的基础命令整理成了一张速查表,建议初期练习时贴在屏幕边上:
| 你想做什么 | 按键组合 | 补充说明 |
|---|---|---|
| 进入插入模式并插在光标前 | i |
最常用 |
| 进入插入模式并追加在行尾 | A |
相当于 $a |
| 新建一行并进入插入模式 | o |
在下方新增 |
| 删除光标所在行 | dd |
配合数字可批量 |
| 复制光标所在行 | yy |
配合数字可批量 |
| 剪切并粘贴到别处 | dd 然后 p |
也可以理解为移动行的快捷方式 |
| 跳到指定行 | 数字 + G |
例如 120G |
| 向下搜索 | /内容 |
回车确认 |
| 撤销 | u |
按次数逐级回退 |
1.3 保存退出命令一箩筐,到底该记哪几个
保存退出是网络热词里被问烂了的问题,常见的有 :w、:q、:wq、:x、ZZ。这几个命令看起来功能差不多,但细节上各有各的脾气。使用次数多了之后,我反而想提醒大家:别机械记忆命令,要理解 Vim 在保存退出时会校验什么。
:w 是保存但不退出,相当于其他编辑器的 Ctrl+S。如果文件是只读的,会提示 E45: 'readonly' option is set,这时候如果确认要强制写,需要用 :w!。:q 是退出不保存,若文件有修改未保存,Vim 会拒绝退出并提示 `E37: No write since l
