Alt+Insert 是上下文感知快捷键,需光标位于特定语法位置(如类体内字段行、子类名处、implements行等)才触发完整 Generate 菜单,否则无响应或选项受限。

Alt+Insert 触发 Generate 菜单前必须满足的上下文条件
光标位置不对,Alt+Insert 就不会弹出你想要的选项——它不是全局快捷键,而是强依赖当前语法结构的上下文感知工具。
常见失效场景包括:光标在空行、字符串内、注释里、类体外的 } 前一行,或 TypeScript 接口定义内部。这些位置按 Alt+Insert 要么无响应,要么只显示极有限的选项(如 “Create Test”)。
- 想生成 getter/setter 或构造函数?光标必须落在类体内部,且最好直接放在某个字段声明行上
- 想重写父类方法?光标得停在子类名上,或已有的方法签名行(不能在方法体内)
- 想实现接口方法?光标要放在类名后、
{前,或implements关键字所在行 - TypeScript 中字段若没显式类型或初始值(如
name;),Alt+Insert可能直接忽略它——补成name: string = ''才会被识别
Live Templates 生成重复 HTML/JS 结构时缩写不生效的排查点
输入 html:5 按 Tab 没反应,大概率不是模板没配,而是作用域或冲突问题。
WebStorm 的 Live Templates 默认有严格的作用域限制,且缩写匹配是精确的、区分大小写的。例如 clg 是内置模板,但你在 JSX 文件里输 clg 不会展开,因为默认作用域不含 JavaScript React。
- 检查模板设置里的 Applicable in:JSX 文件需同时勾选
JavaScript和React JSX - 缩写被占用?比如你自定义了
log,但内置的log已存在,新模板就不会触发——改用lg或logd - 输入后出现灰色补全提示(非高亮模板名)?说明当前上下文不匹配,比如在
style属性值里输div,它不会展开为标签 - 变量未渲染?模板中用了
${NAME}但生成后是空字符串,说明该变量没被正确初始化——可在模板编辑页点击Edit variables设置默认表达式
用 fs-extra 手动实现模板生成时容易漏掉的路径细节
自己写脚本调用 fse.copy() 或 fse.readFile() 读模板时,__dirname 和运行路径混淆是高频崩溃点。
比如你把模板放项目根目录 templates/ 下,配置里写 "templates": "./templates",但脚本实际执行路径是 /Users/me/project/cli(工具包安装路径),这时 ./templates 就会指向错目录。
- 始终用
path.resolve(__rundir, agConfig.templates, tempname)构造模板绝对路径,别依赖相对路径拼接 -
fse.readJsonSync()读配置失败时别静默 fallback——加try/catch并console.error()具体错误,否则模板读不到却输出“生成成功” - 变量替换用
content.replace(/\$\[(.+?)\]/g, ...)没问题,但注意正则没做转义,如果模板里真有字面量$[xxx]且不该替换,就得换更安全的标记方式(比如{{name}}) - 输出文件前先
fse.ensureDirSync(path.dirname(outputPath)),否则嵌套目录(如src/pages/UserList/index.tsx)会因父目录不存在而报错
为什么 WebStorm 的重复代码检测不提醒你手动复制的区块
WebStorm 的 Duplicate code detection(在 Settings > Editor > Inspections 里)只识别“结构相似 + 行数阈值内”的代码块,它不扫描剪贴板历史,也不记录你 Ctrl+C/Ctrl+V 的行为。
也就是说,你从 A 文件复制 10 行到 B 文件,只要这两段代码不在同一项目扫描范围内(比如跨模块、或其中一段被注释包裹),它大概率不会标黄警告。它的设计目标是发现长期演进中无意形成的重复逻辑,不是监督你的操作习惯。
真正管用的方式是:把高频复制的结构提前做成 Live Template 或 fs-extra 脚本——工具不替代思考,但能堵住最懒的漏洞。


















