<p>Ctrl+Shift+/ 在 HTML 中失效是因为注释行为由光标所在位置的语法 scope 决定:script 内走 JS 注释、style 内走 CSS 注释、纯文本区域才用 <!-- -->;选区不“干净”会导致注释不完整;可通过键绑定强制 text.html 下启用块注释。</p>

Ctrl+Shift+/ 在 HTML 的 <script> 或 <style> 里失效?先查语法 scope</script>
Sublime 的 toggle_comment 命令在 HTML 文件中是否走块注释(<!-- --> 还是 /* */),完全取决于光标所在位置的语法 scope,而不是文件后缀或根标签。比如:
– 光标在 <script> 标签内 → 实际 scope 是 source.js,触发 JS 注释逻辑(// 或 /* */)
– 光标在 <style> 内 → scope 是 source.css,走 CSS 注释规则
– 光标在 <template> 或纯文本区域 → 才可能命中 text.html.basic,启用 <!-- -->
验证方法:按 Ctrl+Shift+P → 输入 Developer: Show Scope Name 回车,看状态栏显示的 scope 是否含 text.html。若显示 source.js,说明你正处在嵌入脚本里,Ctrl+Shift+/ 自然不会插 <!--。
为什么 <!-- --> 只包了半行或漏闭合?选区必须“干净”
HTML 块注释对选区结构敏感:
– 不能跨折叠区域(比如折叠了 <div> 块再选中内部)
– 不能只选标签的一部分(如只选中 <p>Hello 中的 Hello,不包含 <p> 和 </p>)
– 不能含空行或缩进不一致的行首(Ctrl+Shift+/ 会拒绝包裹,只加开头 <!--)
– 若选中内容已含注释符号(如已有 <!--),命令会尝试“取消注释”,而非补闭合
可靠做法:
– 按 Ctrl+A 全选后再用 Ctrl+Shift+/
– 或先用 Ctrl+Shift+L 切换到列模式,再手动在每行起始插入 <!-- 和 -->
立即学习“前端免费学习笔记(深入)”;
想让整个 HTML 文件统一用 <!-- -->?别改语法包,改键绑定
硬改 Packages/HTML/Comments.tmPreferences 风险高:格式错一个字符就全局失效,升级后还被覆盖。更稳的是在用户键绑定中强制限定行为:
[{"keys": ["ctrl+shift+/"], "command": "toggle_comment", "args": {"block": true}, "context": [{"key": "selector", "operator": "equal", "operand": "text.html"}]}]注意:
– "block": true 表示走块注释路径
– "context" 确保只在 text.html scope 下生效,不影响 <script> 里的 JS 行为
– 保存后立即生效,无需重启
某些自定义组件标签(如 <my-comp>)不识别?scope 缺失是主因
Sublime 默认 HTML 语法不识别非标准标签,光标落在 <my-comp> 内时,scope 可能退化为 text.html.basic 或 meta.tag,导致 toggle_comment 无法匹配任何注释定义。
临时解法:
– 按 Ctrl+Shift+P → Set Syntax: HTML(确保右下角显示 HTML,不是 Plain Text)
– 或安装 HTML-Custom 类插件,它会扩展 scope 规则并补全 blockComment 字段
– 终极兜底:用列模式(Ctrl+Shift+L)手动加 <!-- / -->,不依赖语法定义
真正容易被忽略的是 scope 动态性——同一 HTML 文件里,不同标签区域的注释行为可以完全不同,这不是 Bug,而是 Sublime 的设计前提。别指望一键通吃所有嵌套场景。



















