vscode插件when表达式中路径正则需跨平台适配:resourcedirname=~ /src/ 配合 resourceextname=="" 或 explorerresourceisfolder 限定目录,避免系统斜杠差异;search.include/exclude仅支持glob模式,如"/node_modules/";ctrl+p搜索需用./或**/约束范围。

when 表达式里怎么写路径正则才生效
VSCode 插件的 when 表达式支持正则匹配,但路径字段(如 resourceDirname)是**绝对路径**,且不同系统斜杠方向不一致:Windows 是 d:\project\src,macOS/Linux 是 /Users/name/project/src。直接写 /src/ 在 Windows 上永远不匹配。
真正能跨平台工作的写法是用双反斜杠转义(Windows 路径)或统一用正斜杠(macOS/Linux 路径),并依赖 VSCode 的内部转换逻辑:
-
resourceDirname =~ /\\src\\/—— Windows 绝对路径中匹配src(注意 JSON 字符串需再转义一次,最终写成"\\\src\\\") -
resourceDirname =~ //src//—— macOS/Linux 中匹配/src/;但 Windows 下resourceDirname值含反斜杠,此正则无效 - 更稳妥的做法:用
resourceDirname =~ /src/(不带分隔符),配合&& resourceExtname == ""或&& explorerResourceIsFolder限定为目录,避免误中文件名含src的情况
别指望一个正则通吃所有平台——插件发布前必须在目标系统上用 Developer: Inspect Context Keys 真实查看 resourceDirname 值再写。
search.include 和 search.exclude 怎么填才不白配
VSCode 全局搜索的 search.include 和 search.exclude 只认 **glob 模式**,不是正则,也不接受相对路径字面量。填错就等于没填。
常见失效写法及修正:
- 错:
"node_modules"→ 不加通配符前缀,VSCode 当作文件名匹配,不是路径 - 对:
"**/node_modules/**"→ 排除所有层级下node_modules目录及其全部内容 - 错:
"srccomponents"(Windows 用户手抖打反斜杠)→ glob 只认正斜杠/ - 对:
"src/components/**"或更安全的"**/src/components/**"(兼容嵌套结构) - 多个规则必须用英文逗号分隔:
"**/dist/**,**/build/**,**/*.log"
注意:search.include 是白名单,一旦启用,**只搜列出的路径**,其他一概跳过;而 search.exclude 是黑名单,是在默认全搜基础上过滤。两者不要混用同一意图。
Ctrl+P 文件名搜索为什么总飘到错的文件
Ctrl+P 默认是子序列模糊匹配,不是前缀匹配。输 apiU 会命中 authApiUtil.ts、userApi.js,甚至 wrapInput.ts(a-p-i-U 连续可提取)。
想收窄范围,得靠符号约束:
- 加
./前缀:如./api→ 强制匹配项目根目录下以api开头的文件或一级子目录 - 用
**/显式表达深度:**/api/→ 匹配任意深度中名为api的目录(注意末尾斜杠) - 驼峰缩写更稳:
htpCl比httpc更大概率命中httpClient.ts - 按
Tab切换排序模式,选“文件名”后首字母权重会上升,但不能完全替代符号约束
如果仍不准,检查 files.exclude 是否漏配,或 Search: Use Ignore Files 是否关闭——.gitignore 里写的 dist/ 不生效,就会塞进一堆编译产物干扰结果。
插件开发时 resourceDirname 的值到底是什么
这个变量的值取决于你点击的位置和当前打开方式:
- 在资源管理器里右键点击一个文件夹 →
resourceDirname是该文件夹的**绝对路径**(Windows 含\,macOS/Linux 含/) - 在编辑器里打开一个文件再触发上下文菜单 →
resourceDirname是该文件所在目录的绝对路径 - 用 code-server 打开时,它可能变成**相对于 workspace root 的路径**(如
src/models),而非绝对路径 -
resourceScheme几乎总是file,无法靠它区分文件/文件夹
所以别硬编码本地路径到 when 表达式里。真要适配多环境,要么用宽松匹配(如 resourceDirname =~ /models/),要么在插件激活时动态读取 workspaceFolders 做运行时判断——when 表达式本身不支持变量或函数调用。











