Ctrl+/ 默认只执行行注释,因其依据语法定义的 comment_line_start 而非选区长度;块注释需用 Ctrl+Shift+/(或对应平台键),且依赖语法是否定义了 comment_start 和 comment_end。

Ctrl+/ 为什么只注释行,不包成 /* */?
Sublime 的 Ctrl+/ 默认永远是“行注释”行为,哪怕你选中了连续 10 行 JS 或 CSS 代码,它也只会每行加 //,不会自动合成一个 /* */ 块。这不是 bug,是设计逻辑:它查的是语法定义里的 comment_line_start,而不是根据选区长度判断要不要块注释。
真正触发 /* */ 或 包裹的,是另一组快捷键,且依赖当前语法是否声明了 comment_start 和 comment_end。比如:
- CSS 文件里
Ctrl+/仍用//(部分语法包改成了/* */行式),但Ctrl+Shift+/才会强制套一层/* */ - HTML 中选中一段文本按
Ctrl+/,可能只在行首尾加,导致标签错位;而Ctrl+Shift+/更大概率生成完整包裹 - Python 语法包默认没定义块注释,所以
Ctrl+Shift+/在source.python下基本无响应
Ctrl+Shift+/ 没反应?先确认三件事
Ctrl+Shift+/(Windows/Linux)或 Cmd+Option+/(macOS)不是万能块注释键,它只在满足全部条件时才工作:
- 当前文件语法必须正确定义了
comment_start和comment_end(如 JavaScript、CSS、Java 支持,Python、YAML 默认不支持) - 光标必须落在完整逻辑行内,或选区必须是“连续、无空行、无缩进断裂”的文本块;只选中半行、跨函数体、含空行都可能导致失败或生成不闭合的
/* - 右下角语法名不能是
Plain Text或Unsupported syntax——点它手动切到JavaScript或CSS再试
如果仍无效,临时用命令面板:Ctrl+Shift+P → 输入 Toggle Block Comment,看是否列出该命令。没出现说明当前语法根本不支持块注释。
自定义块注释快捷键,比改语法包更稳
想让 .sh 文件也支持 /* */,或让所有语言按下某个键就强制块注释,别去碰 Comments.tmPreferences 那种 plist 文件——格式错一个字符就整个失效,升级还容易丢。
直接改用户键绑定更可靠:
- 打开
Preferences → Key Bindings - 在右侧用户配置里加一条:
[ {"keys": ["ctrl+alt+/"], "command": "toggle_comment", "args": {"block": true}} ]
保存后,ctrl+alt+/ 就变成强制块注释键,不依赖语法是否原生支持。同理,把 "block": true 换成 false,就能覆盖掉某些语言默认的块倾向(比如让 JS 选中时也坚持用 //)。
列模式是最后兜底方案,但最可控
当语法识别错乱、插件冲突、或者你想在某几行中间位置插入 //(比如给 console.log 加前缀),所有快捷键都会失效。这时候列模式是唯一不看语法、不靠配置的硬核办法:
- 按住
Alt(Win/Linux)或Option(macOS),鼠标从第一行目标列拖到最后一行同一列 - 松手后直接输入
//或#,所有行对应位置同步出现 - 适合修复被错误注释的某几列、补全调试日志、或处理
.env这类 Sublime 默认不识别注释的文件
真正容易被忽略的是:Sublime 注释行为完全由语法 scope 决定,不是靠文件后缀“猜”。同一个 Ctrl+/ 在 .js 和 .conf 里表现不同,不是你装错了插件,是它压根没加载注释规则——先看右下角,再操作。











