跳到正文
docai.cc

DOCAI · 课程 · L3 · 28 分钟 · 交互模式与工具

Vim 编辑器模式

写长提示词时,少挪手就能省一半时间。这一节讲 Vim 模式怎么开、两个模式怎么切、五个键怎么先用起来,以及它和真 Vim 的边界。

Claude Code 程序员 · 交互模式

你将学会

  • 在 Claude Code 里开启或关闭 Vim 模式
  • 分清插入模式与普通模式,随时切换
  • 用五个基础键完成删行、撤销与提交

什么时候值得开

一天只写两三句短指令,开 Vim 模式只会碍事:多一次模式切换,多一层心智负担。但如果经常写多段提示词——贴错误日志、列改动要求、写验收标准——用方向键挪光标和逐个删字就很浪费。Vim 模式把一整套编辑动作搬进输入框,熟练之后换一个词、删一整行都只要两三个键。

先记住一点:它不是完整的 Vim。这个前提立住,后面就不会因为某个插件或自定义映射不生效而困惑。

判断要不要开,可以看三个信号。第一,单条提示词经常超过一百字,写到后半段还要回头改前半段。第二,经常把几十行日志或代码贴进来,再在里面挑几处改。第三,你本来就用 Vim,hjkl 已经成了条件反射。三条里占一条,收益就大于学习成本;一条都不占,默认键位更省心。

和默认键位方案比

Claude Code 默认沿用终端行编辑器的习惯,Ctrl+A 到行首、Ctrl+E 到行尾、Ctrl+W 删一个词。两套方案没有优劣,只看场景:

维度 默认(行编辑风格) Vim 模式
上手成本 低,记住几个 Ctrl 组合即可 高,要先习惯两个模式
改长文 一般,移动靠按词跳 强,删行、改词、跳段都很快
改短句 顺手 反复切模式反而拖慢
和终端习惯 一致 不一致,要重新建立反射
需要留意的负担 少 要时刻知道自己在哪个模式

还有一个容易被忽略的因素:你经常在不同终端之间切换,或者同一台机器多人轮流用。先固定一套主用键位,另一套的组合键别混着按;像 Ctrl+A 这种在两边落点不同的组合,混用最容易在着急时按错。确定用 Vim 模式后,给自己一周时间只用它,形成反射再谈效率。

打开与确认

当前版本在 /config 里选 Editor mode 就能开关;也可以在 ~/.claude/settings.json 里写 “editorMode”: “vim”,让之后每次启动直接进入。旧版有过独立的 /vim 命令,已经在 v2.1.92 移除,看到旧教程时别照着敲。不同版本的提示方式不一样:有的在提示符前标出当前模式,有的靠光标形状区分,块状表示普通模式,细线表示插入模式。看不出来时,先按 Esc,再按一下 i;不管刚才在哪个模式,这两下都会把你放回插入模式。

想写入配置,文件长这样:

{
  "editorMode": "vim"
}

改完保存,下次启动生效;正在运行的会话不会热加载,退出重进一次最稳。想临时关掉,回到 /config 把 Editor mode 改回默认即可,不必去动配置文件。

三步确认当前状态

不确定自己是不是真的开了 Vim 模式,按顺序做三个动作:

  1. 打开 /config,看 Editor mode 那一行的当前值。
  2. 回到输入框按 Esc,再按 h 或 l,看光标是否按字符左右移动;能移动说明普通模式生效。
  3. 按 i,再敲一个字母。字母出现在输入框里,说明插入模式正常;字母没出现、光标反而跳了,说明还停在普通模式。

三步都符合预期,再开始写正文。这个小检查只要几秒,能省掉后面一串「怎么不听话」的困惑。

两个模式,一条主线

插入模式就是普通输入框,按什么就输入什么。普通模式下按键是命令:移动、删除、复制、跳转。新手最常见的困惑是「怎么打字没反应」,原因几乎都是停留在了普通模式。

切换本身很便宜。按 i 在光标处开始输入,a 往后挪一格再输入,大写 I 到行首,大写 A 到行尾,o 在下方新开一行,大写 O 在上方新开一行。退回普通模式按 Esc,Ctrl+[ 效果相同。心法只有一句:大部分时间待在普通模式,真要打字才进插入模式,打完立刻退出。

六个进入插入模式的键,差别只在落点:

按键 落点 典型用途
i 光标所在字符之前 句中补字
a 光标所在字符之后 句尾续写
I 本行第一个非空字符前 给整行加前缀
A 本行末尾 补一句要求
o 下方新起一行 追加一条约束
O 上方新起一行 在前面插条件

刚切换过来时,最容易犯的错是在普通模式里直接敲正文。看到屏幕上的字没出现、光标却跳来跳去,别再重复敲,先按 Esc 再按 i。另一个对称的错是打完字忘了退出,接着按 / 想搜索,结果输入的是一串字面字符。养成「打完就 Esc」的节奏,这两个坑都不会踩。

五个键先够用

不熟悉 Vim 的人不必背整张表,先把五个动作练顺:

动作 按键 使用场景
回到普通模式 Esc 任何时候按都不会错
开始输入 i 或 a 进入插入模式
删除当前行 dd 整行写歪了
撤销 u 按错之后的保险
提交 回车 确认内容后直接提交

这五个键能覆盖大半日常改稿。之后补移动与改词:h j k l 逐字符走,w 和 b 按词跳,0 与 $ 到行首行尾,gg 与 G 到整段开头结尾,f 加一个字符则跳到本行下一个该字符处;yy 复制一行,p 粘贴;ciw 改掉光标所在的词,ci” 改引号里的内容。这些组合的共同点是「动作加范围」,记范围比记组合更省力。

练这五个键,可以拿一段三行草稿做循环:按 i 写一行,Esc 退出,dd 删掉,u 撤回,再按 A 在行尾补一句,最后回车提交。整套动作重复三遍,手就有记忆了。不要一上来就背三十个命令,先用顺五个,再按下面的地图逐个加。

一段真实的编辑过程

假设要写这样一段提示词:

请把 src/api/client.ts 里的重试逻辑抽成独立函数,
保留现有日志,并补三个覆盖超时场景的测试。

流程可以是这样:从 /config 打开 Editor mode,按 i 进入插入模式,把内容写完(写多行用 Ctrl+J 换行,单独按回车是提交);按 Esc 回到普通模式;发现某个词想换掉,用 w 或 b 按词移动,或者按 f 加一个字符直接跳到该字符上,再用 ciw 改掉那个词;多删了一行就按 u 撤回;确认无误后按回车提交。整个过程不需要把手移出主键区,也不用反复按退格。

再换一个改稿场景:三行提示词已经贴在输入框里,你想删掉中间一行、把最后一行复制成第二条约束,再换掉一个词。

  1. 按 gg 回到第一行,按 j 下移到第二行,dd 删掉它。
  2. 按 yy 复制当前行,p 在下方粘贴一份。
  3. 用 w 移到要改的词上,ciw 删掉它并直接输入新词。
  4. 按 Esc 回到普通模式;改错了按 u 逐步撤回,Ctrl+R 重做。
  5. 确认无误后按回车提交。

这个场景练的是「移动—删除—复制—修改」的衔接。每做完一个动作先回普通模式再动光标,能避免在插入模式里误触命令。

想整段替换某个反复出现的词,可以试 :%s/旧词/新词/g。这个命令在部分版本里可用,在另一些版本里可能被当作普通输入,第一次用先拿一段无关紧要的草稿试,看到确实替换了再依赖它。命令末尾加 c 会在每处替换前询问,适合改动位置多的场景。

普通模式的完整键位地图

真正让 Vim 好用的是「动作加范围」的组合方式:一个动词配一个移动或文本对象,就能精确处理一片区域。下面按类别列出常用键,够覆盖输入框里的绝大多数编辑动作。

移动

目标 按键 说明
单字符 h j k l 左、下、上、右
单词 w b e 下一个词首、上一个词首、词尾
行内 0 ^ $ 行首、首个非空字符、行尾
全文 gg G 第一行、最后一行
指定行 nG 跳到第 n 行,例如 5G
段落 { } 上一段、下一段(以空行分隔)
行内定位 f 加字符 跳到本行下一个该字符处

长提示词里最常用的是 gg 和 G:写完发现开头要改,按 gg 一下到顶;要补验收标准,按 G 一下到底。中间移动用 w 和 b,比连按方向键快。

删除与复制

目标 按键 说明
单个字符 x / X 删光标处 / 删光标前
一个词 dw / db 向后删 / 向前删
整行 dd / ndd 删一行 / 删 n 行,如 3dd
到行首尾 d0 / D 删到行首 / 删到行尾
词内 diw 不管光标在词中哪里都能删整个词
引号或括号内 di” / di( 删成对符号之间的内容
整段 dap 删光标所在的一段
复制 yy / nyy / yw / y$ / yiw 复制行 / n 行 / 一个词 / 到行尾 / 词内
粘贴 p / P 光标后 / 光标前

复制在 Vim 里叫 yank,粘贴叫 put,记住这两个词,看别的教程时不容易迷路。注意 y 和 d 都只是「动作」,后面跟什么决定范围:跟 w 是词,跟 $ 是行尾,跟 iw 是当前词。理解这一层,就不用逐个背组合。

修改、撤销与查找

目标 按键 说明
改一个词 cw / ciw 删除并进入插入模式
改引号内 ci” 常用于改路径、变量名
改整行 cc / C 改整行 / 改到行尾
删字符并输入 s / S 改一个字符 / 改一整行
撤销与重做 u / Ctrl+R 反悔 / 恢复
重复上次修改 . 连着改多处同样内容时最省力
向后查找 / 加词 版本不同,可能落到输入框或历史
下一个匹配 n / N 配合查找使用,是否可用以实测为准
行内替换 :s/旧/新/g 当前行全部替换
全文替换 :%s/旧/新/g 整段全部替换,末尾加 c 逐处确认

「.」这个键值得单独练:改完一处后移动光标,按一次点号就能重复刚才的修改。批量把几个变量名改成同一种格式时,它比一次次输入快得多。

常见故障:现象、原因、处理

现象 为什么 怎么办
敲字母屏幕上没字,光标乱跳 还停在普通模式,字母被当成命令 先按 Esc,再按 i
按 / 想查输入框里的词,却跳出了历史 这个键被借给历史搜索了 用 w、b、f 定位;先确认本版本的行为
输入框突然空了 误按 :q! 或连按两次 Esc 先按 u 试试,再按上方向键翻历史
大写命令行为不对 Caps Lock 开着,大小写含义不同 关掉 Caps Lock 重试
Ctrl+B 之类的组合没反应 终端复用器的前缀键被截走 连按两次前缀,或把前缀换成别的键
自定义映射完全不生效 它不读取 .vimrc 改用外部编辑器写长稿
块选择按不出来 只实现了字符级和行级选择 用 v 或 V 完成选择
提交时报错,内容却被清空 某些版本把 :q! 当作清空输入 重新翻历史找回,之后少碰这个命令

表格里的处理顺序不是随便排的:先确认模式,再确认按键有没有被终端截走,最后才怀疑版本差异。绝大多数「Vim 模式坏了」都是前两步。

已知边界与冲突

它模拟的是按键行为,不加载你的 .vimrc:那里的自定义映射、插件、主题、自动命令都不会生效;可视选择支持字符级(v)和行级(V),块选择没有。重度依赖自己配置的人,更适合在真正的编辑器里写完再粘贴,或者把 EDITOR 指向常用编辑器,按 Ctrl+G 或 Ctrl+X Ctrl+E 调出它来写长提示词。

外部编辑器这条路值得单独说一下。把环境变量 EDITOR 设成 vim,或者在对话里按 Ctrl+X Ctrl+E,就会临时打开完整编辑器;写完保存退出,内容回到输入框。这个组合依赖终端的行编辑配置,按了没反应,先查本机配置,不必反复重装工具。另一条更稳的路是把提示词存成文件,用 claude < prompt.md 送进去,编辑器是什么、终端是什么都不影响。

还有几处冲突要留意:普通模式下按 / 或 Ctrl+R 都是反向历史搜索,不是在输入框里搜词,想移动光标得靠 w、b、f 这些动作;大写与小写含义不同,Caps Lock 开着会按出一串意外命令;终端复用器的前缀键也可能抢走某些组合,tmux 里连按两次 Ctrl+B 才会传给 Claude Code。遇到按键没反应,先确认自己在哪个模式,再查键位冲突。想理解这些按键最终作用在哪一层,可以看Claude Code 是什么。

最后划一条适用边界:如果只是偶尔改一两个错字,别开 Vim 模式;如果经常在终端里写超过屏幕一屏的长提示词,或者你本来就离不开 Vim 的编辑手感,它值得花时间练。练的顺序是五个基础键、移动与改词、最后才是替换和文本对象,不必一次学全。同章的键盘快捷键、命令历史和后台 bash 命令也值得放在一起用;需要贴多行内容时,先看多行输入把换行方式定下来,再用 Vim 模式改稿,顺序会更顺。

自测

先自己回答,再展开对照;答不上来就回到对应小节。
  1. 01第一次开启 Vim 模式,为什么直接打字没反应?看答案

    开启后默认停在普通模式,字母键触发的是编辑命令而不是输入。先按 i 或 a 进入插入模式,再开始打字。

  2. 02Vim 普通模式下按 /,搜的是输入框里的文字还是历史?看答案

    是历史。Claude Code 把 / 映射成反向历史搜索,和 Ctrl+R 相同;要在输入框里移动,用 w、b、f 这些动作。

查看 Markdown

涉及的概念

在知识树上