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(每行只替换了第一处)。
终端效率小系列:下一篇
下一篇讲 Emacs 风格快捷键——包括一个进阶技巧:在 shell 命令行敲了一半的命令,直接甩进 vim/nvim 里编辑,改完存盘退出,编辑结果自动回到命令行。用到的正是这篇学的基础操作。






