Skip to content

@ 文件只给路径不塞内容: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 或更高。

Claude-cn.org,专注于 Claude Code 中文教程