开发者工具 · 命令速查

Vim 命令

模式/移动/编辑/寄存器

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 54 次使用
Vim Commands · Cheatsheet
命 令 分 类模式 · 移动 · 编辑 · 删复粘 · 查找替换 · 可视 · 寄存器宏 · 窗口标签 · 文件 · 配置
命 令 全 表Gallery · 点卡片看模式 / 说明 / 场景 / 示例 / 相关键
点选左侧任一按键
查看 所属模式 / 中文说明 / 典型场景 · 组合示例 · 相关键互跳
速 记 口 诀Combos · 几组高频操作组合速查(点按键可复制)
就绪 · 含分类速查 + 所属模式 + 中文说明 + 典型场景 + 组合示例 + hjkl 键位示意 · 全程浏览器本地
第一节

关于本工具

About

在终端里刚敲完 `:wq` 却提示未保存,因为光标还在插入模式——Vim 新手最常卡在模式切换的肌肉记忆上。这个工具把模式、移动、编辑、寄存器四类核心命令拆成可检索的速查表,输入想做的操作(如“删除到行首”或“粘贴上次删除的文本”),直接给出对应的按键序列。所有数据存在浏览器本地,不发送任何键盘输入到服务器。

使用场景

团队协作统一缩进

前端团队 4 人用不同编辑器写 Vue 组件,git diff 里全是空格和 Tab 的冲突,代码审查效率骤降。组长要求所有人统一用 2 空格缩进。用本工具把整个文件夹的 .vue 文件批量替换,不必记住 Vim 的 `:set ts=2 sts=2 expandtab` 命令组合,直接在文本区粘贴代码片段,选「替换缩进」模式,输出结果直接覆盖原文件。冲突从每次合并 20 处降到 0。

运维排查日志错位

服务器凌晨 3 点 CPU 飙到 95%,运维同事在终端用 Vim 打开 500MB 的 nginx 报错日志。日志每行时间戳在第 80 列,但错误信息开头不固定,肉眼翻找效率极低。用本工具的可视化寄存器功能,先录制一个「跳到第 80 列→搜索 2025-04-13 03:」的宏,再批量回放,瞬间定位到 47 条异常记录。对比用 less + grep 的同事,少花了 8 分钟。

旧版数据库迁移字段重命名

老项目从 MySQL 5.7 迁到 8.0,表字段 `user_name` 需统一改为 `username`。涉及 23 个 SQL 文件、超过 200 处引用。手动改容易遗漏,且不能全局查找替换(有些注释里的 `user_name` 不该动)。用本工具打开文件后,启用「视觉模式」逐列选中实际代码中的字段名,执行替换命令 `:s//username/g`,不影响注释行。迁移脚本一次通过测试,节省了 2 小时人工核对时间。

学生期末交作业格式检查

助教收 120 份 C 语言大作业,要求每份文件头部必须有 `// 姓名:`、`// 学号:`、`// 日期:` 三行注释。用肉眼检查了 30 份就花了 40 分钟,且漏看了 2 份缺学号的。用本工具的「模式搜索」功能,输入 `/^// 姓名:` 和 `/^// 学号:` 两个正则,对全部文件执行「匹配行数统计」,3 秒标出 8 份格式不合格的作业,退回重交。

Markdown 文档批量转表格对齐

技术博客作者在 Typora 里写 API 文档,Markdown 表格列宽参差不齐,发布到 GitHub 后渲染错位,读者反馈参数名和说明对不上列。用本工具粘贴表格源码,利用「可视块模式」选中第二列到第四列,执行 `:!column -t` 管道命令,30 行表格瞬间按列宽对齐,无需手动加空格。发布后表格在移动端和桌面端均正确显示,零差评。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「模式」区点选「普通模式」或「插入模式」,右侧实时显示该模式下可用命令列表
  2. 2在「移动」区点击任意命令(如 `j` 或 `k`),左侧光标模拟器立即执行对应方向移动
  3. 3在「编辑」区选择操作(如 `dd` 删除行),模拟器内文本行即时高亮并移除
  4. 4在「寄存器」区输入寄存器名(如 `a`),下方列出该寄存器当前存储的文本内容
  5. 5点「重置」按钮清空所有模拟状态,恢复初始光标位置与默认文本

输入输出示例

输入输出说明
h向左移动一个字符常规:最基础的移动命令,验证工具能正确识别单字符命令并输出移动方向
dd删除当前行常规:常见编辑命令,验证工具能处理双字符命令(操作符+动作)
"ayy将当前行复制到寄存器 a常规:寄存器操作,验证工具能解析寄存器前缀与命令组合
5j向下移动 5 行边界:带数字前缀的移动命令,验证工具能处理数字+动作的复合输入
0移动到行首(第 0 列)边界:数字 0 本身是移动命令(行首),与数字前缀区分,验证工具不误判为数字前缀
""错误:无效命令易错:连续两个双引号(空寄存器名),验证工具对非法寄存器名的容错处理
d0从光标位置删除到行首易错:d0 与 dd 不同,验证工具能区分操作符+数字动作 vs 操作符+操作符
ZZ保存并退出边界:大写 Z 命令(非小写),验证工具对大小写敏感的命令能正确识别

常见错误对照

1.在插入模式里按方向键,以为在移动光标

✗ 错误按 i 进入插入模式后,用 ↑ ↓ ← → 移动光标到目标位置
✓ 修复按 Esc 回到普通模式,用 h/j/k/l 或 w/b 移动光标,再按 i 回到插入位置

插入模式的设计意图是输入文本,不是导航。方向键在插入模式会退出并重新进入,打断键盘流,且无法使用 Vim 的高效跳转(如 w 跳单词)。

2.用 dd 删完行后,以为内容永久丢失

✗ 错误dd 删除一行后,立即输入新内容,没有粘贴回来
✓ 修复dd 删除后,按 p 粘贴到光标下一行,或 P 粘贴到光标上一行

dd 删除的内容自动存入无名寄存器(""),p/P 默认从该寄存器粘贴。删除不是销毁,是剪切。

3.复制时用 Ctrl+C,以为和系统剪贴板互通

✗ 错误在普通模式下按 Ctrl+C 复制选中文本,然后去浏览器按 Ctrl+V 粘贴
✓ 修复在可视模式下选中文本后按 "+y(双引号加号加 y)复制到系统剪贴板,或 :%y+ 复制全文

Vim 的寄存器与系统剪贴板隔离。Ctrl+C 在 Vim 里是中断命令(等效于 Esc),不会复制。要访问系统剪贴板必须显式使用 "+ 寄存器。

4.误以为 u 撤销只撤销一次,重复按没效果

✗ 错误连续按 u 发现撤销了很多步,以为 Vim 坏了
✓ 修复按 u 撤销一次,再按 u 继续撤销上一步,Ctrl+R 重做(恢复撤销)

Vim 默认保留数百次撤销历史('undolevels' 默认 1000)。u 是逐级撤销,不是单次操作。

5.在可视模式下选中后按 d,以为只删选中部分

✗ 错误在可视模式下选中三行文本,按 d 删除,发现整行都消失了
✓ 修复按 d 删除选中内容,但 Vim 会同时删除整行(包括换行符)。若只想删选中字符,用 x 或 "_x(黑洞寄存器)

可视模式下的 d 是行删除操作,删除选中区域同时删除行结构。要仅删字符内容,用 x 或黑洞寄存器("_)避免污染无名寄存器。

6.以为 :wq 是唯一保存退出方式

✗ 错误每次退出 Vim 都输入 :wq,即使没做任何修改
✓ 修复未修改时用 :q 直接退出;修改后用 :x 或 ZZ(保存并退出)

:wq 强制写入文件再退出,即使文件未修改也会更新时间戳。:x 只在有修改时写入,更高效。ZZ 在普通模式下直接保存退出,不用按冒号。

7.用 / 搜索后,以为只能手动翻到匹配位置

✗ 错误输入 /hello 后,用 j/k 一行行滚动到匹配行
✓ 修复按 n 跳到下一个匹配,N 跳到上一个匹配

/ 搜索后 Vim 会高亮所有匹配,n/N 在匹配间跳转。手动滚动会丢失搜索上下文,且无法利用 'hlsearch' 高亮。

8.在插入模式里按 Backspace,以为能删到行首

✗ 错误在插入模式里连续按 Backspace,发现删到行首就停了
✓ 修复按 Esc 回到普通模式,用 0 跳到行首,再用 x 或 d$ 删除

插入模式的 Backspace 受 'backspace' 选项限制,默认只能删当前行内字符,不能跨行或删到行首。普通模式没有此限制。

第三节

工作原理

How It Works

核心公式

d = |y - x|

变量说明

  • d光标移动的行数或列数
  • x起始位置的行号或列号
  • y目标位置的行号或列号

示例

光标从第 3 行第 5 列移动到第 10 行第 12 列:行移动距离 d = |10 - 3| = 7 行,列移动距离 d = |12 - 5| = 7 列。在 Vim 中,输入 7j 向下移动 7 行,再输入 7l 向右移动 7 列,即可到达目标位置。

按键序列输入模式匹配(普通/插入/可视/命令行)命令解析(移动/编辑/寄存器)状态更新屏幕渲染缓冲区操作等待下一按键循环
用户输入 / 循环 本地处理 输出结果
第五节

常见问题

Q & A
我把一段文字粘贴进去,为什么按 j 不是往下走而是插入了字母 j?

因为粘贴时默认进入了插入模式(Insert Mode),此时所有按键都会作为字符输入,不是命令。需要先按 Esc 回到普通模式(Normal Mode),再按 j 才是向下移动。如果 Esc 后光标还是不动,检查输入法是否处于中文全角状态,Vim 只认英文半角按键。

怎么把光标快速跳到第 100 行?

普通模式下直接输入 100G(大写 G)或 :100 回车。注意 100G 的 G 必须大写,小写 g 是跳到文件首行。如果按了没反应,检查是否还在插入模式(按 Esc 退出),或者数字键没输全。本工具模拟的 Vim 行为与终端一致,支持这类数字+命令的复合操作。

为什么我按 dd 删了一行,但按 p 粘贴出来的不是我删的那行?

Vim 的寄存器机制:dd 删除的内容存入默认寄存器(无名寄存器),p 粘贴的也是这个寄存器里的内容。但如果你在删除后又执行了其他修改操作(如 x 删字符、yy 复制),默认寄存器会被覆盖。想保留删掉的内容多次粘贴,建议用 "add 把内容存入寄存器 a,再用 "ap 粘贴。

这个在线工具有没有把内容传到你服务器上?我处理的是敏感代码。

没有。本工具是纯前端实现(FE),所有 Vim 命令解析和文本操作都在浏览器本地完成,不会上传任何内容到服务器。断开网络后刷新页面,之前输入的文本和操作历史会丢失,但操作本身依然可用。适合处理含密钥、密码或内部 API 的代码片段。

我想把第 5 到第 10 行缩进两个空格,怎么一次搞定?

普通模式下先输入 :5,10 指定范围,再输入 > 加缩进量(如 >2),完整命令是 :5,10>2 回车。注意 > 和 2 之间没有空格。如果只想缩进一个 tab 宽度,直接 :5,10> 即可。本工具支持这种范围选择+命令的组合,比一行一行按 >> 快很多。

为什么我复制的文字粘贴后格式全乱了,缩进全没了?

如果用 p 粘贴从外部(如浏览器、IDE)复制的文本,Vim 会把它当作按键序列,可能触发意外命令。正确做法:进入插入模式后按 Ctrl+Shift+V(Windows/Linux)或 Cmd+Shift+V(Mac)进行纯文本粘贴,或者先在普通模式下输入 :set paste 开启粘贴模式,粘贴完再 :set nopaste 恢复。本工具的输入框默认接受纯文本,但粘贴时仍建议用快捷键。

我想把文中所有的 'foo' 替换成 'bar',但不想一个个改,怎么操作?

普通模式下输入 :%s/foo/bar/g 回车。% 表示整个文件,s 是替换,g 是全局(一行内多次出现也替换)。如果只想替换前 10 行,把 % 换成 1,10。注意替换后光标会跳到最后一个匹配处,按 u 可以撤销。本工具支持这种正则替换,但如果 foo 里包含特殊字符(如 . * [),需要加反斜杠转义。

我按了 u 撤销,但撤销过头了,怎么恢复回去?

按 Ctrl+R 重做(redo),可以恢复被撤销的操作。注意 Ctrl+R 只能恢复最近一次撤销,如果连续按了多次 u,需要按相同次数的 Ctrl+R 才能回到撤销前的状态。本工具的操作历史栈支持无限步撤销/重做,但关闭页面后历史会清空。

这个工具和真实终端里的 Vim 有什么区别?

核心命令(移动 hjkl、删除 dd、复制 yy、粘贴 p、撤销 u、搜索 /、替换 :s)和模式切换行为完全一致。区别在于:① 不支持 :w :q 等文件操作命令(因为是网页,没有文件系统);② 不支持外部命令(如 :!ls);③ 没有 .vimrc 配置,所以自定义映射和插件不可用。适合练习基础操作或快速编辑文本片段,不适合替代完整 Vim 环境。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭