速览
- 键位配置放在 ~/.claude/keybindings.json——输入 /keybindings 即可创建并打开,保存后立即生效,不用重启。
- 按键绑定按 context 分组(Chat、Autocomplete、Agents、Scroll 等),把 "ctrl+e" 这类键映射到 chat:externalEditor 这类 action;把键设为 null 即可解绑。
- Vim 模式:直接跑 /vim,或者走 /config → Editor mode → 空格 → 回车。Escape 在 INSERT/NORMAL 间切换;v2.1.118 起还支持 visual mode(v/V)。
- 有些键动不了:Ctrl+C、Ctrl+D、Ctrl+M 属于保留键,无法重绑;tmux 的 Ctrl+B 前缀更是会在 Claude Code 收到之前就把快捷键截走。
How to Enable Vim Editor in Claude Code CLI
频道:ProgrammingKnowledge21:32
Claude Code v2.1.118 — Vim Visual Mode & Custom Themes
频道:Claude Code Updates0:41
How to use Vim in Claude Code
频道:HAMY LABS5:41
Claude Code release notes — v2.1.118 & v2.1.288
更新日志:github.com/anthropics/claude-code
Keybindings — official documentation
官方文档:code.claude.com/docs
本页事实均与官方 keybindings 文档以及 v2.1.118、v2.1.288 两条更新日志交叉核对;截图取自上面列出的视频。所述行为对应 Claude Code v2.1.288(2026 年 10 月)。
截图均为上述视频的画面帧,注明出处,且每一步都带回到原始时间点的链接。
改键与开启 vim 模式的完整步骤
在 keybindings.json 里改键
- 1
启动 Claude Code,确认环境
在终端里运行 claude 进入会话。改键和 vim 模式都是 CLI 能力,本页所有操作都在同一个提示符里完成。v2.1.288 及以上版本还带来了 agents 视图的新快捷键:Ctrl+F 搜索、Alt+↑/↓ 在分组之间跳转。

一个全新的 Claude Code 会话,随时可以开始定制。看视频 0:17 处 - 2
用 /keybindings 打开 keybindings.json
在提示符里输入 /keybindings。如果 ~/.claude/keybindings.json 还不存在,Claude Code 会先创建这个文件,再用编辑器打开。保存的修改会被自动检测,完全不用重启。

斜杠菜单会随着输入过滤——/keybindings 就是其中一项。看视频 0:34 处 - 3
在 context 里把键映射到 action
文件里是一个按 context 分组的 bindings 数组——Chat、Autocomplete、Agents、Task、Scroll 等等。每个块把一个键映射到一个 action 名:undefined }。在文件开头加上 $schema 字段,编辑器就能自动补全所有 action 名。
- 4
用 null 解绑,用和弦键串联
把某个键设为 null 即可关掉默认行为——"ctrl+s": null 会禁用输入暂存。和弦键用空格分隔,"ctrl+x ctrl+k" 表示先按 Ctrl+X,三秒内再按 Ctrl+K。少数组合是保留键,无法重绑:Ctrl+C、Ctrl+D、Ctrl+M、Ctrl+[ 和 Ctrl+I。
打开 vim 模式
- 5
用 /config 打开设置面板
不想手改 JSON?/config 会打开演示视频里的那个设置面板:Status、Config、Usage 三个标签页,加一个随输入即时过滤的搜索框。

/config 面板列出所有设置项,包括 Editor mode。看视频 0:40 处 - 6
搜索定位到 Editor mode
在搜索框里输入 edit,列表立刻收窄到 Editor mode 这一项。默认值是 normal——也就是 readline 风格的编辑方式,用惯 bash 或 Emacs 键位的人会很熟悉。

Editor mode 默认是 normal,按空格即可切换。看视频 1:08 处 - 7
按空格切到 vim
选中 Editor mode 这一行后按空格——取值立刻从 normal 变成 vim。底部提示行写明了操作:Space 修改、Enter 保存、/ 搜索、Esc 取消。

一个空格就能选中 vim。看视频 1:11 处 - 8
回车保存,认准 -- INSERT --
按 Enter 保存。Claude Code 会输出 "Set editor mode to vim",状态栏随之出现 vim 的 -- INSERT -- 标记。这个选择在同一台机器上跨会话保持——它以 editorMode 的形式存在 ~/.claude.json 里。那是运行时文件,还存着 OAuth 缓存和会话状态,别想着把它软链进 dotfiles。

保存成功——页脚出现了 vim 的 -- INSERT -- 标记。看视频 1:28 处 - 9
insert 模式打字,normal 模式指挥
insert 模式就是普通打字。按 Escape 进入 normal 模式:h、j、k、l 移动光标,b 和 w 在词间跳转,d 删除、c 修改、r 替换。再跑一次 /vim 就能整体关掉 vim 模式。vim 自己的键位不走 keybindings.json——想改 INSERT 模式里的序列(比如 jj 退回 normal),要用 vimInsertModeRemaps。
- 10
用 visual mode 选中文本(v2.1.118+)
不少老教程说 Claude Code 没有 visual mode——那已经过时了。v2.1.118 带来了 visual mode(v)和 visual-line mode(V),支持选区、操作符和可视化反馈:v 加 motion 按字符选择,V 加 motion 按行选择,然后用 d、y 或 c 处理选区。

v2.1.118 给 Claude Code 的 vim 模式补上了 v 和 V 选区。看视频 0:16 处
值得背下来的默认快捷键
- 11
记牢最常用的默认快捷键
Shift+Tab 循环切换权限模式,Enter 提交,Ctrl+J 换行,Ctrl+L 清空输入,Ctrl+R 搜历史,Ctrl+O 切换 transcript,Ctrl+T 看待办,Ctrl+B 把任务转后台,Ctrl+X Ctrl+K 终止 agents。v2.1.288 起,agents 视图里 Ctrl+F 按名称找会话、Alt+↑/↓ 在分组间跳转——这些通通都能在 keybindings.json 里改。
keybindings.json、/config、/vim:各管什么
Claude Code 里有三层机制决定按键行为。它们是叠加关系而非互斥——想清楚要改什么,再选对应的那层。
- 1keybindings.json 改单个 action:把 chat:externalEditor 挪到 ctrl+e、解绑 chat:stash、加一组 ctrl+x 和弦。粒度最细,可以进版本库。
- 2/config → Editor mode 切换整套编辑模型,在 normal(readline)和 vim 之间二选一。一次切换、立即保存,对这台机器之后的每个会话都生效。
- 3/vim 的效果和 Editor mode 开关完全一样——只是最快的一条路,也是 HAMY LABS 教程里用的命令。再跑一次就切回 normal。
- 4有些键根本到不了 Claude Code:tmux 的 Ctrl+B 前缀、GNU screen 的 Ctrl+A、会挂起进程的 Ctrl+Z,都在终端层就被截走了。这类问题去终端里解决,别改 keybindings.json。
- 5进了 vim 模式,vimInsertModeRemaps 是改 vim 行为(比如 jj 映射 escape)的唯一途径——keybindings.json 刻意不碰 vim 内部键位。
经验法则:讨厌某一个快捷键 → keybindings.json;想换整套编辑手感 → vim 模式;某个键毫无反应 → 先查终端。
改键不生效?按顺序排查
绝大多数键位问题都逃不出下面五种原因。动手改文件之前,先按顺序过一遍。
- 1改了没反应:先确认文件是 ~/.claude/keybindings.json(不是 settings.json),再确认 JSON 能正常解析。用 --debug 启动 Claude Code,可以看到 action 拼错、context 不存在之类的绑定警告。
- 2某个键拒绝重绑:Ctrl+C、Ctrl+D、Ctrl+M(永远等于 Enter)、Ctrl+[(永远等于 Escape)、Ctrl+I(永远等于 Tab)是保留键。文本框里输入的可打印字符会直接进输入框,不触发绑定。
- 3Ctrl+B 或 Ctrl+A 毫无动静:tmux 和 GNU screen 把它们当成自己的前缀吃掉了。要么在 keybindings.json 里换一个键,要么改多路复用器的前缀。
- 4复用和弦前缀失败:如果 ctrl+x 开头有好几组和弦,必须把所有 ctrl+x 和弦全部解绑,ctrl+x 才能当普通单键用。
- 5vim 的键不理会你的绑定:这是设计如此——vim 模式自己管自己的键。insert 序列用 vimInsertModeRemaps;如果 v 或 V 选区毫无反应,先把 Claude Code 升级到 v2.1.118+。
想恢复任何默认值,把对应那行从 keybindings.json 里删掉即可——是「删除」而不是「写回默认值」让原始绑定回来。
