vim 基本操作:从模式切换到保存退出
“怎么退出 vim”是程序员圈子里流传最广的梗之一——一个编辑器要是连怎么关掉都成了笑话,说明它一定有什么地方和你以为的不一样。
这个”不一样”,就是 vim 最核心的概念:模式。搞懂这一件事,剩下的操作都顺理成章。
这是终端效率小系列第二篇,承接 不熟悉的命令怎么快速搞懂:man 页面结构、apropos 搜索与 –help 速查。
vim 最核心的概念:模式
大部分编辑器打开就能直接打字。vim 不是——它默认打开的是 Normal 模式(也叫命令模式),这时候敲键盘不是在输入文字,是在下命令。想打字,得先按 i 切换到 Insert 模式;打完字想回去下命令,按 Esc 切回 Normal 模式。
1 | 打开 vim → 默认在 Normal 模式(敲字母是命令) |
新手最常见的翻车场景就是这个:不知道自己在 Normal 模式,对着屏幕一通乱按,结果文件被改得面目全非——因为那些字母全被当成了命令,不是文字。记住一条:不确定自己在哪个模式,先按 Esc,回到 Normal 模式再说,这是最安全的复位动作。
先学怎么退出
呼应开头的梗,这个必须先讲:
1 | :q |
所有这些命令都以 : 开头,输入前记得先确认自己在 Normal 模式(如果还在 Insert 模式,先按 Esc)。
Normal 模式下移动光标
vim 不太依赖方向键,用几个字母键代替(键盘老式布局上这几个键离主键位更近,不用挪手,很多人这么解释这个设计,具体历史已经不可考):
1 | h j k l |
前面加数字表示重复次数:
1 | 5j |
行内跳转:按字符查找与括号匹配
hjkl/w/b/e 这些是逐字符或逐单词移动,遇到”跳到这一行某个具体符号上”的场景(比如跳到某个逗号、跳到配对的括号),还有更快的办法:
1 | f, |
一行很长的代码里要定位到某个符号,f 加上那个字符,比一个字符一个字符挪快得多;改代码时经常要确认括号有没有配对齐,把光标放在括号上按 % 直接跳到另一半,比肉眼数括号可靠。
Normal 模式下编辑文本
1 | i |
i/a/o/O 这四个进 Insert 模式的方式,区别就在光标最终停在哪:i 停在原地之前,a 停在原地之后,o/O 分别在下面/上面新开一行。
Visual 模式:选中一段范围再操作
前面的编辑命令大多是”整行”或”一个单词”级别,想自己框选一段范围再操作,要用 Visual(可视)模式。进入方式有三种,选中范围的方式不一样:
1 | v |
选中范围之后,跟前面学过的编辑命令组合使用,效果作用在整个选区上:
1 | d |
举例:用 V 选中三行按 d,一次删掉三行;用 v 选中一段文字(不是整行)按 y,只复制这一小段。选错了想取消,按 Esc 退出 Visual 模式,不会做任何改动。
查找和替换
搜索用 /,和上一篇讲 man 页面查找里 less 的搜索快捷键是同一套逻辑——vim 的分页和搜索机制本来就深受这套习惯影响:
1 | /关键词 |
全局替换用 :%s:
1 | :%s/旧文本/新文本/g |
% 和 g 这两个符号经常被忽略,结果就是”明明替换了,怎么还有没改的地方”——十有八九是漏了 %(只在当前行生效)或者漏了 g(每行只替换了第一处)。
常见操作场景
几个高频的实际场景,用到的都是前面没提过、但一旦知道就回不去的操作。
跳转后把光标行挪到屏幕舒服的位置:zz / zt / zb
只滚动屏幕、不动光标,把光标所在行摆到屏幕中间/顶部/底部。
用 gg/G/搜索跳到目标行后,那一行经常落在屏幕最顶上或最底下,看上下文很费劲。这时候不用挪光标,直接调整视口:
1 | zz |
这三个命令只滚动屏幕,光标始终停在原来那一行——在编辑器/IDE 里用 vim 插件跳转到函数定义后,按一下 zz 让目标行居中,是最顺手的组合。
光标不动只滚视野:Ctrl-e / Ctrl-y
一行一行地滚动屏幕,光标钉在原地不动。
想瞄一眼当前屏幕外的上下文,但不想让光标离开正在编辑的位置:
1 | Ctrl-e |
半页半页地翻:Ctrl-d / Ctrl-u
上下滚动半页,光标跟着视口走,浏览长文件的主力翻页方式。
比整页翻(Ctrl-f/Ctrl-b)保留更多上下文,浏览长文件时更常用:
1 | Ctrl-d |
注意 Ctrl-d/Ctrl-u 和上一个场景不一样:它们滚动时光标会跟着视口移动,适合”人在翻文件”;Ctrl-e/Ctrl-y 是”光标钉在原地只挪视野”,适合编辑中途瞄一眼别处。
终端效率小系列:下一篇
下一篇讲 Emacs 风格快捷键——包括一个进阶技巧:在 shell 命令行敲了一半的命令,直接甩进 vim/nvim 里编辑,改完存盘退出,编辑结果自动回到命令行。用到的正是这篇学的基础操作。










