VS Code files.associations匹配中间子目录及通配符使用疑问
VS Code files.associations 通配符问题解答
哈哈,这个问题我之前折腾VS Code的时候也碰到过,它的文件关联通配符逻辑确实有不少细节要注意,咱们一步步说清楚:
为什么 somefolder/**/*.txt 不生效?
VS Code 的 files.associations 用的是标准 glob 通配符规则,其中 ** 的作用是匹配任意层级的子目录(至少一层,当它夹在两个路径段之间时)。
你尝试的 somefolder/**/*.txt,翻译过来就是:「匹配项目根目录下 somefolder 文件夹里至少一层子目录中的 .txt 文件」。但你的 .txt 是直接放在 somefolder 根目录下的,完全没经过子目录,所以这个模式自然匹配不到。
而你当前生效的 **/somefolder/*.txt,意思是:「匹配任意层级目录下的 somefolder 文件夹里的直接子 .txt 文件」——刚好覆盖了你放在 somefolder 根下的那些文件,所以能正常生效。
如何匹配中间子目录?
根据你的需求不同,有几种配置方式:
1. 覆盖 somefolder 下所有层级的 .txt(包括根下和子目录)
如果你想同时匹配 somefolder 根下的 .txt,以及它所有深层子目录里的 .txt,可以用两种方式:
- 组合两个规则,分别覆盖直接子文件和子目录文件:
{ "files.associations": { "**/somefolder/*.txt": "sql", "**/somefolder/**/*.txt": "sql" } } - 用更简洁的单一规则,利用
**匹配任意层级(包括零层)的特性:
这个规则会匹配所有位置的{ "files.associations": { "**/somefolder/**/*.txt": "sql" } }somefolder下所有层级的.txt,不管是somefolder/a.txt还是somefolder/sub1/sub2/b.txt都能覆盖到。
2. 匹配特定中间子目录下的 .txt
如果只想匹配 somefolder 下某一层特定的中间子目录(比如只匹配 somefolder/sub 下的所有 .txt),可以这样写:
{ "files.associations": { "**/somefolder/sub/**/*.txt": "sql" } }
内容的提问来源于stack exchange,提问作者Bernhard Döbler
相关产品推荐
相关产品推荐

