Claude Code快捷键交互模式

键盘快捷键

系统梳理 Claude Code 交互模式下的所有键盘快捷键,从启动 REPL 到中断请求、清屏、调出历史、多窗口配合,一篇搞定。

· 阅读约 11 分钟

Claude Code 的交互模式(REPL)大量复用了 Bash 和 Readline 的按键习惯,再加上自己定义的几个快捷键。掌握这些按键能让你少打很多字,也能在 Claude 跑偏的时候立刻把它拽回来。

这篇文章把所有按键放在一起对照,并解释每个按键的设计初衷和容易踩的坑。

完整快捷键对照表

按键作用适用场景
Enter提交当前输入 / 在 Claude 提问时确认单行 prompt 提交
Shift+Enter在输入框中插入换行符(不提交)写多行 prompt 或粘贴代码
Ctrl+C(一次)中断当前正在执行的请求Claude 跑偏了想立刻停下
Ctrl+C(连续两次)退出 Claude Code不想继续对话了
Ctrl+D在空输入框里按 = 退出 REPL干净退出,比 Ctrl+C 优雅
Esc(一次)取消当前未提交的输入 / 中断流式输出按错了想清空输入框
Esc(连续两次)回到对话历史里某条消息进行编辑修改之前的 prompt 重新运行
/ 浏览之前提交过的 prompt 历史重发上一条,或微调后再发
Ctrl+R反向增量搜索历史找几十条之前的某条命令
Ctrl+L清屏(终端层面,不清对话上下文)屏幕太花想视觉上整洁
Tab触发斜杠命令补全 / 文件路径补全不记得 / 后面有哪些命令时
Ctrl+A光标移到行首编辑长 prompt
Ctrl+E光标移到行尾编辑长 prompt
Ctrl+W删除光标前一个单词改错单词不想全删
Ctrl+U删除整行(光标到行首)写到一半想全删了重写
Ctrl+K删除光标到行尾删掉后半段
Alt+B / Alt+F按单词向前 / 向后跳光标不用方向键一格格挪
Ctrl+Z把 Claude Code 进程挂起到后台临时切回 shell 干别的事
fg把挂起的 Claude 拉回前台接着 Ctrl+Z 后用

启动和退出

进入 REPL

# 最简单的启动方式
claude

# 启动时带初始 prompt(直接发送)
claude "看一下 README.md"

# 继续上次的对话
claude -c

# 跳到指定 session
claude --resume <session-id>

启动后会进入交互界面,光标停在输入框等你打字。

退出 REPL

退出有三种方式,各有优劣:

# 方式 1:在空输入框按 Ctrl+D
> [此时输入框为空,按 Ctrl+D]
# 立刻退出,session 自动保存

# 方式 2:连续按两次 Ctrl+C
> [按 Ctrl+C 第一次:中断当前请求]
> [再按一次 Ctrl+C:退出]

# 方式 3:在输入框输入 /exit 或 /quit
> /exit

坑: 如果输入框里有未提交的内容,按 Ctrl+D 不会退出,只会响一下铃。先按 Ctrl+U 清空输入框,再按 Ctrl+D。


中断和取消:Ctrl+C 和 Esc 的区别

这两个键在 Claude Code 里行为不一样,初学者很容易搞混。

Ctrl+C:中断”已经发出去”的请求

当 Claude 已经在生成响应(屏幕上字在滚),你觉得它跑偏了或者太慢了:

> 帮我把整个项目的所有 .py 文件改写成 TypeScript
[Claude 开始疯狂输出,发现方向错了]

# 按 Ctrl+C
^C
[已中断,token 已经消耗的部分不会退回]

> # 光标回到输入框,可以重新发起请求

按一次:中断当前请求,回到输入框; 连续按两次(间隔很短):退出整个 Claude Code。

Esc:取消”还没发出去”的输入

当你在输入框打字到一半,意识到要重写:

> 把 src/utils/parser.ts 里的_
[Esc]
> _
# 输入框被清空,光标回到起点

Esc 也能中断流式输出(和 Ctrl+C 的第一次按键效果类似),但它更安全——不会因为多按一次就把 Claude Code 杀掉。

Esc Esc:跳回去编辑之前的消息

连按两次 Esc 会进入”消息编辑模式”,可以选中之前发过的某条 prompt 修改后重新运行。这在你发现一开始的 prompt 写歪了、想从那条开始改的时候非常有用。

> 第一条 prompt
> 第二条 prompt(基于错误的假设)
> 第三条 prompt
[按两次 Esc]
[选中"第二条 prompt"修改]
[Enter 重新运行]
# Claude 会从那条开始重新走,第三条的回复会被覆盖

历史导航:方向键和 Ctrl+R

上下方向键浏览

调出上一条 prompt,再按 继续往前翻。 往回走。

> ls src/
> grep -r "TODO" .
> claude help
[此时按 ↑]
> claude help          # 调出最近一条
[再按 ↑]
> grep -r "TODO" .     # 再往前一条
[按 ↓]
> claude help          # 回到最近的

调出来的 prompt 可以直接 Enter 重发,也可以编辑之后再发。

Ctrl+R 反向搜索

历史很长的时候,方向键一条条翻太慢。按 Ctrl+R 进入搜索模式,输入关键词就能直接定位:

[按 Ctrl+R]
(reverse-i-search)`': 

[输入 "test"]
(reverse-i-search)`test': 帮我写 jest 单元测试

[再按一次 Ctrl+R]:找下一条匹配
(reverse-i-search)`test': 跑一下 npm test 看看

[Enter]:选中并提交
[Esc]:选中但不提交,让你编辑

输入框里的光标移动和编辑

Claude Code 的输入框基本上就是一个 Readline 编辑器,所以 Bash 用户的肌肉记忆几乎全部能用。

光标移动

Ctrl+A    # 光标 → 行首
Ctrl+E    # 光标 → 行尾
Alt+B     # 光标 → 上一个单词的开头
Alt+F     # 光标 → 下一个单词的结尾
Ctrl+B    # 光标 ← 一个字符(同 ←)
Ctrl+F    # 光标 → 一个字符(同 →)

删除

Ctrl+H        # 删光标前一个字符(同 Backspace)
Ctrl+D        # 删光标后一个字符(注意:空行时是退出!)
Ctrl+W        # 删光标前一个单词
Alt+D         # 删光标后一个单词
Ctrl+U        # 删从光标到行首的全部
Ctrl+K        # 删从光标到行尾的全部

撤销 / 重做

Ctrl+_        # 撤销上一步编辑
Ctrl+Y        # 把 Ctrl+K / Ctrl+U 删掉的内容粘回来

Ctrl+Y 这个特别有用:你 Ctrl+U 把整行删了之后才发现还想要,按 Ctrl+Y 可以拿回来。


清屏:Ctrl+L 和 /clear 的区别

很多人以为 Ctrl+L 会清空对话,其实不是。

操作效果
Ctrl+L只清屏幕,对话上下文还在,Claude 还记得之前聊的
/clear清空对话历史,Claude 会忘掉所有聊过的内容,相当于重新开始
/compact压缩历史(保留摘要),上下文不丢但占的 token 少

什么时候用哪个:

# 屏幕看不下了,想清爽一点继续聊
> [Ctrl+L]

# 这个话题聊完了,开始全新的任务
> /clear

# 上下文很长但还想继续,担心 token 爆掉
> /compact

回车 vs Shift+Enter

输入框里:

  • Enter = 提交当前内容给 Claude
  • Shift+Enter = 在当前位置插入换行符,不提交

写多行 prompt 必须用 Shift+Enter

> 帮我看下这段代码:[Shift+Enter]
function foo(x) {[Shift+Enter]
  return x + 1;[Shift+Enter]
}[Shift+Enter]
有什么问题?[Enter]
# 这一整段作为一条消息发送

某些终端模拟器不支持 Shift+Enter(比如某些 Windows Terminal 旧版本),可以试试 Alt+EnterCtrl+J,或者用 """ 多行字符串(详见多行输入那篇文章)。


复制粘贴技巧

从终端复制 Claude 的输出

Claude 输出的内容在终端里就是普通文本,用终端原生的复制方式:

终端复制粘贴
iTerm2 / Terminal.app(macOS)Cmd+CCmd+V
Windows TerminalCtrl+Shift+CCtrl+Shift+V
GNOME TerminalCtrl+Shift+CCtrl+Shift+V
tmuxPrefix + [ 进入 copy mode,空格选中,回车复制

粘贴大段代码到 Claude

直接 Ctrl+Shift+V 粘贴。如果代码有多行,Claude Code 会自动识别并保留换行(Bracketed Paste 模式)。

坑: 极少数终端没开启 Bracketed Paste,粘贴的多行内容会被一行一行依次”提交”。如果遇到这个问题:

# 在 ~/.inputrc 加上
set enable-bracketed-paste on

# 或者改用 """ 多行字符串
> """
> 这里粘贴
> 多行
> 内容
> """

多窗口和 tmux 配合

Claude Code 一个会话只能聊一个对话。要并行处理多个任务,最常见的做法是 tmux 多窗格 + 多个 Claude 实例。

经典布局

# 启动 tmux
tmux new -s dev

# 切成左右两栏
[Prefix + %]

# 左边跑 dev server
$ npm run dev

# 切到右边
[Prefix + →]

# 右边开 Claude
$ claude

# 现在可以一边跑一边问

常用 tmux 按键(默认 prefix = Ctrl+B)

按键作用
Prefix + %垂直分屏
Prefix + "水平分屏
Prefix + →/←/↑/↓切换窗格
Prefix + d把整个 tmux session 挂到后台(detach)
tmux a -t dev重新接上 detach 的 session

Claude Code 多实例的实用姿势

# 窗格 1:在主分支跑测试
$ claude

# 窗格 2:在 feature 分支改 bug
$ git worktree add ../proj-feat feat-branch
$ cd ../proj-feat && claude

# 两个 Claude 各自有独立 session 和 CLAUDE.md,互不干扰

进程挂起:Ctrl+Z 和 fg

正在和 Claude 对话,突然要切回 shell 干点别的(比如 git diff 看一眼):

> 帮我重构这个函数
[Claude 在思考...]

# 不用退出,直接挂起
^Z
[1]+  Stopped     claude

$ git diff src/utils.ts
... [看完了] ...

# 拉回前台继续
$ fg
> # 回到 Claude,对话状态完全保留

Ctrl+Z + fg 是 Unix 标准操作,比退出再 claude -c 快得多。


常见问题

Q:我按 Shift+Enter 没反应,直接提交了。

A:终端没启用相应的转义序列。检查一下:

  • iTerm2:Preferences → Profiles → Keys → 确保没有把 Shift+Enter 映射成”Send: \r”
  • Windows Terminal:搜索”Shift+Enter”看看键位绑定
  • 终端类型变量是否正确:echo $TERM 应该是 xterm-256color 之类

实在不行就用 """ 多行字符串。

Q:按 Ctrl+C 没反应,Claude 还在输出。

A:按住别松,或者快速连按几下。某些慢网络下,中断信号到服务端要一点时间。如果还是不行,按 Esc 试试,或者干脆 Ctrl+\ 强制中断。

Q:方向键翻历史只能翻当前 session 的,没法看上次启动 Claude 时的命令。

A:不对,Claude Code 的命令历史是跨 session 的,存在 ~/.claude/history 之类的文件里。如果你翻不到旧记录,可能是开了多个 Claude 实例同时写历史导致冲突。详细机制看”Claude 命令历史”那篇。

Q:我想自定义快捷键。

A:Claude Code 本身不直接暴露快捷键配置,但因为它用的是 Readline,你可以改 ~/.inputrc 里的绑定,比如:

# ~/.inputrc
"\C-x\C-c": "/clear\n"

Ctrl+X 然后 Ctrl+C 会输入 /clear 并回车。但这是 hack 路线,不保证未来版本不变。


快速参考卡

打印贴在显示器边上:

进入       claude / claude -c
退出       Ctrl+D(空行)/ /exit / Ctrl+C×2
中断请求   Ctrl+C×1 / Esc
取消输入   Esc / Ctrl+U
历史       ↑↓ / Ctrl+R 搜索
清屏       Ctrl+L(不清对话)
清对话     /clear(不清屏)
压缩对话   /compact
换行       Shift+Enter
补全       Tab
挂起       Ctrl+Z(fg 拉回)
编辑历史   Esc Esc

标记本节教程为已读

记录您的学习进度,方便后续查看。