在 Cursor 里,.cursorignore 和 .cursorindexingignore 看起来很像,但用途并不一样。很多大仓库一开始就把两者混着用,结果不是索引还是乱,就是把本来还想让 AI 看的代码也一起挡掉了。
最简单的区别是:.cursorindexingignore 只影响索引,不影响大部分 AI 读取能力;.cursorignore 则更激进,它会阻止这些文件进入索引,也会影响 Tab、Agent、Inline Edit 和 @ 引用等访问路径。也就是说,一个偏性能和搜索,一个偏访问控制。
如果你是因为 monorepo 太大、编译产物太多、文档太杂,想让代码库搜索更干净、更快,优先用 .cursorindexingignore。因为这些文件也许不值得建索引,但你未必想完全禁止 AI 在必要时查看。
反过来,如果你是明确不希望某些目录进入 AI 的常规工作流,比如凭证、私有配置、无关子项目,那才更适合用 .cursorignore。它表达的是“别让这些内容进入主要 AI 访问面”,而不只是“别给它们做 embedding”。
很多人为什么会用反?因为看到“ignore”就默认理解成一个意思。结果把性能问题当安全问题处理,或者把安全问题当索引问题处理。典型后果就是:
1. 用 .cursorignore 屏蔽一堆其实只是不想建索引的大目录,导致 AI 回答时可见范围过窄。
2. 只写 .cursorindexingignore,以为已经把敏感文件挡住了,实际 AI 在别的路径下还是可能碰到。
实操上,一个很好用的分法是:生成物、缓存、巨大日志、第三方 vendor 包,优先放进 .cursorindexingignore;真正不想进常规 AI 上下文的内容,再进 .cursorignore。写完之后,去 Cursor 的 Indexing & Docs 里看 included files,或者用 git check-ignore 验规则,别靠猜。
所以这两个文件不是谁替代谁,而是各管一层。大仓库越复杂,越应该一开始就把“为了提速排索引”和“为了降暴露管访问”分开。分不清这一点,后面调得越多越乱。