在服务器、容器或 SSH 会话里改配置,图形编辑器不可用或不值得开。Vim 几乎预装在 Linux/macOS 上,也能在 Windows 和 WSL 里使用;先练熟普通模式、插入模式和退出方式,再学移动与操作符,否则会在“退不出去”和“误改文件”上耗时间。文本对象、寄存器、宏和插件见进阶与配置页,纯 POSIX vi 见 vi。
Vim 的按键含义取决于当前模式。启动后是普通模式,字母都是命令;只有插入模式才把按键当文字。任何时候按 Esc(或 Ctrl+[)回到普通模式。
普通模式 ──i / a / o / O──▶ 插入模式 ──Esc──▶ 普通模式
│
├──v / V / Ctrl+v──▶ 可视模式 ──Esc──▶ 普通模式
└──: / ?───────────▶ 命令行模式 ──执行后返回──▶ 普通模式
| 模式 | 进入方式 | 主要用途 | 回到普通模式 |
|---|---|---|---|
| 普通模式 | 启动默认;任意模式按 Esc | 移动、删除、复制、执行操作符 | — |
| 插入模式 | i 前、a 后、o 下方新行、O 上方新行 | 输入文本 | Esc 或 Ctrl+[ |
| 可视模式 | v 字符、V 行、Ctrl+v 块 | 选中后执行 d/y/c/> 等 | Esc |
| 命令行模式 | : 执行 ex;/ 和 ? 搜索 | 保存、替换、设置、搜索 | 执行后自动返回 |
命令行启动时可以带行号、搜索位置或只读标志;进入后用 ex 命令保存和退出。:wq 无条件写,:x 和 ZZ 只在有修改时写,:q 遇到未保存修改会拒绝。
vim notes.txt # 打开或新建文件
vim +42 notes.txt # 跳到第 42 行
vim +/timeout notes.txt # 定位到首个匹配
vim -R /etc/hosts # 只读打开
| 命令 | 行为 |
|---|---|
:w |
保存当前缓冲区;:w other.txt 另存 |
:q / :q! |
有修改时拒绝退出 / 放弃修改退出 |
:wq / :x |
保存退出 / 有修改才写入并退出 |
ZZ / ZQ |
有修改才保存退出 / 放弃修改退出 |
普通模式下用 hjkl 移动,w/b/e 按词跳,gg/G 到文件首尾,Ctrl+d/u 翻半页。数字可前置成计数,例如 5j 下移 5 行。
h j k l 左 下 上 右
w / b / e 下个词首 / 上个词首 / 词尾
0 / ^ / $ 行首 / 首个非空字符 / 行尾
gg / G 文件首 / 文件尾
Ctrl+d / u 下半页 / 上半页
{ / } / % 上/下一段 / 匹配括号
i / a / I / A 光标前 / 后 / 行首 / 行尾插入
o / O 下方 / 上方新开一行并插入
x 删除光标处字符
dd / yy / p 删除整行 / 复制整行 / 粘贴到光标后
dw / yw 删除 / 复制一个单词
D / C 删除 / 修改到行尾
u / Ctrl+r 撤销 / 重做
. 重复上一次修改
编辑遵循“操作符 + 动作/文本对象”的组合;ciw、di( 这类文本对象在进阶页展开。i 在光标前,a 在光标后,I/A 到行首/行尾,o/O 在当前行下/上新建一行。
gg / 5dd / u / :wq 移到文件头、删 5 行、撤销、保存退出
/ 向下、? 向上,回车后 n/N 沿同方向继续或反向。搜索默认从文件尾绕回开头(wrapscan),大文件里连续按 n 要注意是否已经绕回,:set nowrapscan 可关闭绕回。
/pattern 向下搜索
?pattern 向上搜索
n / N 下一个 / 上一个匹配
:noh 清除搜索高亮
:set hlsearch incsearch 高亮与增量搜索
:q!;:q 报 E37: No write since last change 是保护,不是故障。:set paste,粘贴后 :set nopaste;或直接用 "+p 从系统剪贴板粘贴。dd 会写入无名寄存器和 "1,之前复制的内容可用 "0p 找回。:w !sudo tee %,清楚它会以 root 写入。异常退出留下 .swp 时,确认没有其他 Vim 进程后再恢复或删除。:q 退出失败,屏幕上的 E37 是什么意思?怎样放弃修改退出?dd、yy、p 各做什么?为什么有时 p 粘贴到当前行下方,有时插在光标后?/error 搜索后,n 和 N 分别往哪走?到达文件尾再按 n 会怎样?:q! 或普通模式 ZQ 放弃修改,用 :wq 保存后退出。dd 删除整行并写入寄存器,yy 复制整行,p 粘贴;整行内容按行粘贴到当前行下方,字符级内容粘贴到光标之后,P 则粘到上方或光标前。:set nowrapscan 关闭。
小程序版
微信扫码,随时查命令