文章

Claude Code Terminal Tab — 一个开源小工具

Claude Code Terminal Tab — 一个开源小工具

背景

用 Claude Code 一段时间了,有个问题一直很烦:官方的 JetBrains 插件在多窗口下工具栏按钮时不时没反应,GitHub 上相关 issue 积压了好几个月没动静。

一开始觉得能忍——毕竟功能上没缺失,顶多是按一下没反应,再按一下就好了。但”再按一下”这件事,在每天几十次切换的节奏下真的很磨人,T_T。

翻了翻 issue,发现大家反馈的现象都差不多,版本卡在 0.1.14-beta 五个多月没动,Marketplace 评分 2.5 分,清一色在骂这个。等不了,索性自己写了个。

官方插件的问题在哪

Claude Code (Beta) 其实挺好用的,核心能力有两块:一是 IDE MCP Server(把当前文件、选中内容等上下文喂给 Claude Code CLI),二是在 IDE 内置终端里快捷打开 Claude 会话。第一块没什么问题,第二块经常抽风。

具体表现是:开多个 Project 窗口时,点工具栏图标有时没反应。MCP Server 我不想动,那个逻辑比较复杂,官方迟早会修。但【终端唤起】这件事太基础了,等不起。

插件做什么

Claude Code Terminal Tab 只做一件事:在 JetBrains IDE 内置终端里可靠地创建并聚焦 Claude Code 会话。

点击工具栏图标(或 Tools → Open Claude Code Terminal Tab),逻辑很简单:

flowchart TD
    A([点击图标]) --> B{Claude tab 存在?}
    B -- 否 --> C[创建 tab\n执行 claude 命令]
    B -- 是 --> D{进程还活着?}
    D -- 否 --> E[关闭旧 tab] --> C
    D -- 是 --> F{tab 已激活?}
    F -- 是 --> G[隐藏 tab]
    F -- 否 --> H[聚焦切过去]

配置项

Settings → Tools → Claude Code 终端

启动命令

默认 claude,会走 PATH 查找。如果你装了多个版本,或者 PATH 里找不到,可以填绝对路径:

1
/Users/yourname/.local/bin/claude

–model

指定模型别名,不填就用账户默认。想用更快的 Haiku 跑机械性任务,或者临时切 Sonnet:

1
claude-sonnet-4-5

启用全屏渲染

可选项,默认关。解决 IDE 内置终端的两个常见问题:输出流式进来时屏幕闪烁、长对话内存持续增长。原理和注意事项见下一节。

–verbose

开启后 Claude 会输出完整的流式 token 和每个 tool call 的细节。调试时有用,日常用会很吵,默认关。

–dangerously-skip-permissions

跳过所有权限确认弹窗,Claude 执行文件读写、命令时不再询问。只在完全隔离的沙箱环境里开,比如 Docker 容器、CI 环境。

追加参数

自由拼接到命令末尾,补充上面没有覆盖的参数。比如:

1
--max-turns 10 --add-dir /path/to/project

全屏渲染

这是 Claude Code CLI v2.1.89 引入的功能。

是啥

Claude Code 默认用【内联渲染/inline rendering】:对话内容流进终端的【scrollback buffer】,就像普通命令输出一样往下堆。这带来两个问题:

一是闪烁。Claude 思考、执行 tool call 时,输出流式进来,终端要不停刷新。在 VS Code 内置终端、tmux、iTerm2 这类渲染吞吐量有限的环境里,屏幕会明显抖——滚动位置突然跳到顶部,或者 tool output 流进来时一阵一阵闪。

二是内存随对话长度增长。内容全部堆在【scrollback buffer】里,聊得越久占得越多。

原理

用 vim 来理解好了。打开 vim 的时候,终端屏幕内容被”接管”了,但你关掉 vim 之后,之前的 shell 历史一字不差还在——这是因为 vim 切换到了终端的【alternate screen buffer/备用屏幕缓冲区】,是一块独立的渲染区域,不写主缓冲区的 scrollback。

全屏渲染做的是同一件事:Claude Code 进入【alternate screen buffer】,只渲染当前可见的消息窗口,不把历史内容往 scrollback 里堆。内存用量因此和对话长度脱钩;每轮只渲染屏幕大小的内容,渲染量大幅减少,闪烁自然也消失了。

开启方式有两种,效果等价:

1
2
3
4
5
# 方式一:环境变量(v2.1.110 之前只有这个)
CLAUDE_CODE_NO_FLICKER=1 claude

# 方式二:CLI 命令(推荐)
/tui fullscreen

插件的”启用全屏渲染”选项,本质上就是启动时注入 CLAUDE_CODE_NO_FLICKER=1,省去每次手动设的麻烦。

为什么同时关掉鼠标

全屏渲染默认会接管鼠标事件,支持点击展开 tool output、鼠标选文本、点击链接。但接管之后,终端原生的文本选择就失效了——在 tmux 或 SSH 环境里这有点烦,Cmd+F、tmux 复制模式也都不好用了。

CLAUDE_CODE_DISABLE_MOUSE=1 可以关掉鼠标接管,保留原生选择能力,同时保有无闪烁渲染和内存恒定。代价是失去鼠标点击相关的交互功能。

IDE 内置终端用鼠标选文本的场景多,插件把这两个变量一起注入,默认关掉鼠标接管:

1
CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude

如果你想要完整的鼠标交互,在”追加参数”里覆盖即可。

代价

【alternate screen buffer】里的内容,进程退出后清空,没有 scrollback。如果你习惯翻看之前的输出,这个模式不适合你。官方提供了 Ctrl+o 进入【transcript mode】做搜索,或者按 [ 把对话内容写回终端 scrollback 临时查看,但还是比直接滚屏麻烦一些。

和官方插件的关系

两者不冲突,推荐一起装。

IDE MCP Server 那块挺有用的——Claude Code CLI 能感知你当前打开的文件、选中的代码,写代码时上下文更准。只是别依赖官方插件的终端唤起,用我这个替代那一块就好。

安装

Marketplace 搜 “Claude Code Terminal Tab”,或者直接 点这里

支持 JetBrains 全家桶(IntelliJ IDEA、GoLand、PyCharm 等),要求 IDE 2024.2+,macOS 测试通过。Windows 暂时没完整适配,欢迎 PR。

总结

这个插件解决的问题很窄:官方插件终端唤起不稳定。功能就这些,不多,但够用。

用了大概两周,每天几十次点击,没出过问题。如果你也被官方插件折腾过,可以试试。

两点实际使用建议。一是推荐和官方插件一起装,IDE MCP Server 那块保留,只用本插件替换终端唤起这块;二是全屏渲染按需开——对话长、输出多的场景开了明显少闪,但你要是习惯翻 scrollback 查历史,那还是算了。

有问题欢迎在 GitHub 提。

参考

本文由作者按照 CC BY 4.0 进行授权