@ 文件只给路径不塞内容:CLAUDE_CODE_DISABLE_FILE_MENTIONS
在 Claude Code 里输入 @src/app.ts,是最快的「把这个文件给你看看」的方式。默认情况下,Claude Code 会把 @ 到的文件内容直接展开,跟你的消息一起发出去(前提是文件不超过 Read 工具的 token 上限,默认 25,000 token;超过 256KB 的文本文件不会被带上);@ 一个目录,则会带上目录列表。
这很方便,但也有代价:文件一大、一次 @ 好几个,上下文瞬间就被吃掉一大块,而且其中很多内容 Claude 根本用不上。
CLI 2.1.299 新增环境变量 CLAUDE_CODE_DISABLE_FILE_MENTIONS,让你换一种玩法。
设了之后有什么不同
设为 1 后:
@提到的文件和目录不再被展开;- Claude 收到的是这些路径,外加一句提示:请用文件工具去读;
- 之后由 Claude 自己决定读哪个、读哪一段——比如用 Read 只读需要的行,或者先 Grep 定位再读。
| 默认 | CLAUDE_CODE_DISABLE_FILE_MENTIONS=1 | |
|---|---|---|
| @ 文件 | 内容随消息一起发送 | 只发路径,Claude 按需读取 |
| @ 目录 | 带上目录列表 | 只发路径 |
| 上下文占用 | 立即占用,大小取决于文件 | 只有真正读的部分才占用 |
| 适合 | 小文件、明确要整篇看 | 大文件、多文件、只需要其中一部分 |
可以理解为:@ 从「把文件塞给它」变成了「告诉它看哪里」。
适合哪些场景
- 经常 @ 大文件:日志、生成的代码、几千行的配置。整篇塞进去很浪费,让 Claude 自己 Grep 或分段读更省。
- 一次 @ 很多文件做导航:你只是想说「相关的在这几个地方」,并不需要它全部读完。
- 想让读取都走工具和权限规则:内容通过 Read 等工具读取时,会经过正常的工具调用流程,在记录里也看得更清楚读了什么。
- 长对话里控制上下文增长:配合压缩相关设置,减少因为几次 @ 就把窗口推高的情况。
反过来,如果你 @ 的大多是几十行的小文件,并且就是要它整篇看,默认行为更直接,省掉一轮工具调用。
怎么设置
临时试一下:
bash
CLAUDE_CODE_DISABLE_FILE_MENTIONS=1 claude长期使用,写进用户级 ~/.claude/settings.json 的 env:
json
{
"env": {
"CLAUDE_CODE_DISABLE_FILE_MENTIONS": "1"
}
}注意:项目设置里写了不算
官方文档特别注明:这个变量在项目设置和本地设置里会被忽略,也就是写在仓库的 .claude/settings.json 或 .claude/settings.local.json 的 env 里不生效。
所以要么在 shell 里导出,要么放在用户级设置(或组织的托管设置)里。如果你发现「明明配了却没变化」,先检查是不是写进了项目目录下的设置文件。
顺带一提:@ 相关的近期改动
- 2.1.289 修过通过符号链接 @ 引用绕过 Read 拒绝规则的问题,见 Read 拒绝规则不再被 @ 引用绕过;
- 2.1.300 改进了 Claude 3 系列模型收到 @ PDF 时的提示,减少没读就回答的情况;
- VS Code 扩展在 2.1.300 里新增
claudeCode.attachSelection设置,可以不再把编辑器里选中的文本自动附加到消息里——和本文的变量思路类似,都是让你决定什么内容进上下文。
小结
CLAUDE_CODE_DISABLE_FILE_MENTIONS=1:@ 文件和目录只把路径交给 Claude,由它用文件工具按需读取;- 适合大文件、多文件导航和需要控制上下文的长对话;
- 要写在 shell 环境或用户级设置里,项目和本地设置中会被忽略;需要 v2.1.299 或更高。