文章目录▼CloseOpen
- 手把手教你设置VSCode文件嵌套(从0到1)
- 进阶技巧——让嵌套更符合你的项目习惯
- 自定义嵌套模式:适配你的项目结构
- 排除不需要嵌套的文件
- 结合插件:少写代码,多省时间
- 配置了嵌套规则但没效果,怎么办?
- 嵌套规则里的${capture}是什么意思?
- 能不能让一个主文件嵌套多个层级的子文件?
- 有没有推荐的插件辅助配置文件嵌套?
- 怎么取消某个文件的嵌套?
手把手教你设置VSCode文件嵌套(从0到1)
其实VSCode自带文件嵌套功能,不用装插件也能实现——但很多人不知道怎么打开,或者写不对配置规则。我先带你走一遍最基础的流程,保证你跟着做就能立刻看到效果。
你得打开VSCode的settings.json
文件——这是配置所有个性化功能的入口。打开方式有两种:要么用快捷键Ctrl+Shift+P
(Mac是Cmd+Shift+P
),然后搜“ Preferences: Open User Settings (JSON)”;要么点左下角的齿轮图标→“设置”,再点右上角的“打开设置(JSON)”按钮(就是那个带箭头的{}图标)。别嫌麻烦,这一步是所有配置的基础——我第一次帮朋友调的时候,他找了十分钟才找到这个文件,差点放弃。
在settings.json
里加一段配置:
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"/.vue": "${capture}.js, ${capture}.css",
"/.js": "${capture}.test.js, ${capture}.spec.js"
}
我来解释下这段代码:第一行是开启嵌套功能(默认可能是false,所以要手动打开);第二行的patterns
是嵌套规则,键是“主文件”(也就是你想让其他文件嵌套在它下面的那个文件),值是“子文件”(要被嵌套的文件)。比如"/.vue"
代表所有.vue文件,${capture}
是“捕获主文件名”——比如你有个header.vue
,${capture}
就会变成header
,所以${capture}.js
就是header.js
,${capture}.css
就是header.css
。这样这三个文件就会折叠成一组,主文件是header.vue
,点一下就能展开子文件。
写好之后保存文件,回到VSCode的资源管理器——你会发现原来散着的header.js
和header.css
已经“钻”到header.vue
下面了!如果没效果,先检查这几点:是不是漏写了explorer.fileNesting.enabled": true
?规则里的文件名有没有大小写错误(比如把.vue
写成.Vue
)?或者主文件和子文件是不是在同一个目录里?我第一次写规则时,把/.vue
写成了src/components//.vue
(想限定只在components目录生效),结果忘了自己的组件文件在src/views
里,折腾了十分钟才发现路径错了——所以路径要写对,/
代表任意层级的目录,最保险。
进阶技巧——让嵌套更符合你的项目习惯
基础配置会了,但你肯定想让嵌套更“聪明”一点——比如后端的config文件、测试用例,或者自己项目里的特殊文件,怎么让它们也乖乖嵌套?我再分享几个亲测有效的技巧。
自定义嵌套模式:适配你的项目结构
比如后端项目里的config.js
,通常会有config.dev.js
(开发环境)、config.prod.js
(生产环境)、config.test.js
(测试环境)三个子文件,散着占三行,看着乱。你可以加这样的规则:
"/config.js": "${capture}.dev.js, ${capture}.prod.js, ${capture}.test.js"
保存后,这三个子文件就会嵌套在config.js
下面——我之前做后端项目时,用这个规则把config目录从12行缩到了3行,同事看到都问我要配置,直接复制过去改改就用上了。
再比如写博客时,你可能有my-blog.md
和配套的my-blog.jpg
、my-blog.png
图片,想把图片嵌套在md文件下面,规则是:
"/.md": "${capture}.jpg, ${capture}.png"
这样你的博客目录会瞬间清爽,找图片不用再翻半天。
排除不需要嵌套的文件
有些文件你肯定不想让它嵌套——比如node_modules
里的依赖文件,或者自己的笔记.md
文件(不想让图片嵌套进去)。这时候可以用explorer.fileNesting.exclude
配置:
"explorer.fileNesting.exclude": [
"node_modules/",
"notes//.md"
]
node_modules/
代表排除所有node_modules目录下的文件,notes//.md
代表排除notes目录下的所有md文件——这样这些文件就不会被嵌套规则影响,保持原样。我之前把自己的笔记文件嵌套了,结果找笔记时要展开好几次,后来加了这个配置,瞬间舒服了。
结合插件:少写代码,多省时间
如果不想手写JSON规则,可以试试插件——比如File Nesting Updater
(自动生成嵌套规则)和Nestify
(可视化配置)。我自己常用File Nesting Updater
:打开插件后,它会自动扫描你的项目,找出所有同名的文件(比如header.vue
和header.js
),然后生成对应的嵌套规则。之前我配置20个规则要半小时,用插件一分钟就生成了,省了好多时间——但要注意,插件生成的规则可能包含你不需要的文件(比如header.log
),得手动删一下,别嫌麻烦,总比自己写快。
下面是我整理的常用文件嵌套规则示例,直接复制就能用:
文件类型 | 嵌套主文件 | 嵌套子文件 | 配置代码 |
---|---|---|---|
前端组件 | header.vue | header.js、header.css | “/.vue”: “${capture}.js, ${capture}.css” |
后端配置 | config.js | config.dev.js、config.prod.js | “/config.js”: “${capture}.dev.js, ${capture}.prod.js” |
测试文件 | utils.js | utils.test.js、utils.spec.js | “/.js”: “${capture}.test.js, ${capture}.spec.js” |
React组件 | App.jsx | App.test.jsx、App.css | “/.jsx”: “${capture}.test.jsx, ${capture}.css” |
你可以试试把自己项目里最乱的那个目录用这些方法理一理——比如前端的components
、后端的config
,或者博客项目里的md文件和图片。如果遇到问题,比如规则写对了但没效果,或者想嵌套特殊文件,欢迎在评论区留个言——毕竟我踩过的坑,可不想让你再踩一遍!
你是不是遇到过这种情况?明明在settings.json里写好了嵌套规则,关了再开VSCode,结果文件还是散得乱七八糟,跟没配置一样?别急,我帮做前端的朋友调过好几次这问题, 了几个最容易踩的坑,你跟着逐个查,90%的情况都能解决。
首先得确认最基础的开关有没有打开——settings.json里的“explorer.fileNesting.enabled”是不是设成了true?我朋友第一次配置的时候,光顾着写后面的规则,完全没注意到这个开关默认是false,结果写了一堆代码白费劲,把true加上之后,再看资源管理器,原本散着的js和css立刻钻到vue文件下面了,他当时拍着大腿说“原来这么简单!”
再看规则里的文件路径和扩展名有没有写错。VSCode对这些细节特别较真,比如你想让.vue文件嵌套对应的js和css,可别把“.vue”写成“.Vue”(大小写错了根本认不出来);还有路径里的“/”是不是加对了——比如“/.vue”是说所有目录下的vue文件都生效,要是你写成“src/components/.vue”,那其他目录(比如src/views)的vue文件就不会触发嵌套规则。我朋友之前就是犯了这个错,他想让components目录的文件嵌套,结果把路径写成了“src/components/.vue”,可他的test目录里也有vue文件,那些文件的子文件就没嵌套,后来改成“/.vue”才覆盖了所有情况。
最后还有个容易忽略的点:主文件和子文件必须在同一个目录里!比如你的主文件是src/components/header.vue,子文件要是放在src/utils/header.js,那肯定嵌套不了——VSCode的嵌套规则只认同目录的“同名兄弟文件”。我朋友之前为了整理样式,把所有css文件都挪到了src/styles目录,结果vue文件下面根本看不到对应的css,后来把css文件挪回components目录,和vue文件放在一起,立刻就嵌套成功了。
要是这几个点都查过了还是没效果,你可以把settings.json里的规则复制出来,找个懂点代码的朋友帮你看看——有时候可能是少写了个逗号,或者引号没闭合,这种小错误肉眼真的很难发现。我之前帮另一个朋友调的时候,他的规则里少了个逗号,导致整个patterns对象出错,删了重写一遍就好了。
配置了嵌套规则但没效果,怎么办?
首先检查explorer.fileNesting.enabled是否设为true(默认可能是false);其次确认规则里的文件路径和扩展名是否正确(比如不要把“.vue”写成“.Vue”);最后确保主文件和子文件在同一个目录下——如果主文件在src/components,子文件在src/utils,嵌套不会生效。我之前帮朋友调的时候,他就是把主文件路径写错了,改对后立刻就好了。
嵌套规则里的${capture}是什么意思?
${capture}是VSCode的“变量捕获”功能,用来提取“主文件”的文件名(不带扩展名)。比如主文件是“header.vue”,${capture}就会变成“header”,所以“${capture}.js”就是“header.js”——这样就能让同名的子文件自动嵌套在主文件下。简单说,它就是“把主文件名复制给子文件”的小工具。
能不能让一个主文件嵌套多个层级的子文件?
VSCode默认支持单层嵌套,但可以通过“链式规则”实现多层。比如你想让“header.test.js”嵌套在“header.js”下,再让“header.js”嵌套在“header.vue”下,可以写两条规则:第一条把“header.test.js”嵌套在“header.js”下(规则是“/.js”: “${capture}.test.js”),第二条把“header.js”嵌套在“header.vue”下(规则是“/.vue”: “${capture}.js”)。注意规则的顺序——主文件的规则要写在前面,否则可能不生效。
有没有推荐的插件辅助配置文件嵌套?
如果不想手写JSON,可以试试这两个插件:①File Nesting Updater:自动扫描项目里的同名文件,生成嵌套规则,省得自己写;②Nestify:可视化配置界面,点几下就能设置嵌套规则,适合不想碰代码的朋友。我自己常用File Nesting Updater,生成规则后再微调一下,比手动写快很多。
怎么取消某个文件的嵌套?
有两种方法:①用explorer.fileNesting.exclude配置,把不想嵌套的文件路径加进去(比如“notes//.md”代表排除notes目录下的所有md文件);②调整嵌套规则,把该文件从“子文件”列表里删掉。比如你不想让“header.log”嵌套在“header.vue”下,就把规则里的“${capture}.log”去掉就行。