本节摘要:片段与任务是工位的"轻工装"——不用写插件就能固化重复工序。本节系统讲片段语法(前缀、占位符、制表位、变量、默认值)与任务语法(类型、分组、问题匹配器、后台档、输入变量),各配完整实例,并给出"工装入库共享"的团队做法。造工装是从用装备到造装备的最后一级台阶,下一章的插件开发是它的重型版。
买来的装备再好,总有几处不合手:工匠的最后一步是自制工装——为自家工序特制的夹具与靠模。编辑器里对应两样东西:代码片段固化"重复敲的样板",任务固化"重复跑的工序"。第 2 章装片段包时埋过伏笔("自定义片段是 6.4 的预演"),这一节正式把工装的制造方法交到位。
片段是"触发词加模板"的映射。完整语法四要素:前缀(触发词)、模板体(要铺开的代码)、占位符(可跳转编辑的位置)、变量(自动填充的上下文值)。看一个工程级的例子:
{ "接口错误响应": { "prefix": "errres", "body": [ "response.status(${1|400,401,403,404,500|});", "response.json({", " \"error\": \"${2:错误码}\",", " \"message\": \"${3:错误信息}\",", " \"traceId\": \"$TM_FILENAME\"", "});" ], "description": "标准错误响应骨架" } }
这个片段浓缩了全部语法点:数字占位符按序号用 Tab 跳转;带默认值的占位符可直接回车接受;枚举占位符弹出选项列表(状态码限定五档,防手滑填错);文件名变量自动填入来源文件,排查日志时可溯源。变量家族还有当前行号、剪贴板内容、选中的文本(做"包裹选中内容"类片段的杀手锏)等。
片段文件按语言存放(片段管理命令里选语言即建对应文件),另有一档项目级片段:放在工作区的片段目录里、随仓库共享——团队的公共骨架(接口返回结构、测试用例模板、配置样板)放这级,个人的放用户级,分层原则与 6.1 节同构。
任务把"跑命令"升级为"标准化工序"。第 3 章接过线的读者已见过基础形态,这里补齐工程级要素:输入变量(运行时询问参数)、依赖任务(先构建后部署的链式编排)、后台档(常驻进程的标记)。一个接近真实团队的任务图:
{ "version": "2.0.0", "tasks": [ { "label": "集成测试", "type": "shell", "command": "npm", "args": ["test", "--", "--grep", "${input:testName}"], "dependsOn": ["构建产物"], "problemMatcher": [], "presentation": { "reveal": "always", "group": "test" } }, { "label": "构建产物", "type": "npm", "script": "build", "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$tsc"] } ], "inputs": [ { "id": "testName", "type": "promptString", "description": "要运行的用例名称(空则全跑)" } ] }
读图:集成测试任务依赖构建任务(自动先构建);执行时弹出输入框询问用例名,参数注入命令行;构建任务设为默认构建组,快捷键直达;类型编译的匹配器让构建错误直达源码行。团队的新人拿到仓库,命令面板里就是现成的工序清单——任务文件是团队的作业指导书,这是 3.3 节"接线板"比喻的完成态。
看两件真实工装怎么落地。片段工装:某团队评审发现错误响应结构五花八门,遂定标准、做成项目级片段,一个月后新增代码里错误响应全部同构——评审会上这类讨论彻底消失。任务工装:某团队的发布前检查散落在文档里(清缓存、跑迁移、冒烟),新人照文档手敲经常漏步;整理成带依赖链的任务后,一条命令串起全流程,漏步率归零。两件工装的制作成本都是半小时级,回报以年计——自制工装的本质是把团队的隐性工序变成显性资产。
坑一,片段转义。 模板体是字符串数组,引号与反斜杠要转义;复杂模板建议先在真实代码里写好再搬进来。坑二,任务命令写死绝对路径。 换机器即失效;命令用短名(走路径解析),工作目录用工作区变量。坑三,工装只做不养。 工序变了工装不改,过期的任务比没有更糟(人会信任它);工装文件纳入评审,随工序一起演进。
片段的替代是片段包加手动改(够用但不定制);任务的替代是项目脚本加快捷方式(功能等价,缺集成:无问题匹配、无输入交互、面板不可见)。往上还有一级:把工序做成真正的插件(带界面、跨项目分发)——那就是下一章的正题。自制工装是投入产出比最高的一档:不用编程经验,配置即工装。
问:片段做多少个合适,会不会越多越乱?答:以“高频且稳定”为入库标准——天天敲、模板长期不变的才做片段;临时性模板宁可现写。健康的个人片段库在几十个量级,超过百个就该做一次清点(很多是历史遗留,触发词都忘了)。
问:任务里写长命令链好,还是拆成依赖任务好?答:拆。长命令链把工序藏在字符串里,失败时难定位;拆成依赖任务后,每段有名字、有独立日志、可单独重跑——排错粒度决定救火速度。6.4 节示例里“先构建后测试”的写法就是这个原则的示范。
问:片段里的光标落点怎么设计最顺?答:制表位序号即跳转顺序——把“最可能先改”的位置设为一号(比如组件名),依次排下去,末位放零号(光标最终停留处)。用好零号制表位,一段模板展开改完,光标正好落在该继续写代码的位置。
装备的治理(分层、规范、断案)与进阶(自制工装)至此齐备。下一章是全册最后一轮:满配之后,从用装备走向造装备——插件开发入门、选型章法、社区情报,以及整间工位的总装与移交。