sublime text 的鼠标宏必须通过 packages/user/default.sublime-mousemap 文件配置,该文件为 json 数组格式,仅支持 button、modifiers、command 三字段,不兼容键盘快捷键配置;button 值为 "button1" 至 "button5",modifiers 为小写字符串数组,command 需实测确认;支持 context 和 args 实现场景化响应,但不支持多命令、延迟或链式调用。

Sublime Text 的鼠标宏不走 User.sublime-keymap
鼠标快捷键和“宏操作”在 Sublime Text 里根本不在同一个配置体系里。User.sublime-keymap 只管键盘,所有鼠标行为(中键粘贴、右键菜单、双击、侧键)都得另起炉灶——必须新建一个 Default.sublime-mousemap 文件,且路径固定为 Packages/User/Default.sublime-mousemap。直接往键盘配置里塞鼠标事件,完全无效,也不会报错,只是静默忽略。
怎么写合法的 Default.sublime-mousemap
这个文件格式和键盘配置类似,但必须是 JSON 数组,且每条规则只认 button、modifiers、command 这三个核心字段。常见错误是把键盘的 keys 写法照搬过来,或者漏掉 modifiers 字段导致 Ctrl+左键被识别成普通左键。
-
button值只能是字符串:"button1"(左键)、"button2"(中键)、"button3"(右键)、"button4"(前侧键)、"button5"(后侧键) -
modifiers是数组,比如["ctrl"]、["alt", "shift"],大小写敏感,不能写Ctrl或CTRL -
command名仍需实测:打开命令面板Ctrl+Shift+P搜功能,或用sublime.log_commands(True)在控制台触发一次目标操作来确认 - 保存后立即生效,无需重启;若没反应,先检查右下角红字——90% 是 JSON 格式问题(逗号多写、引号不闭合、中文标点)
实现“Ctrl+左键拖选 → 格式化选区”这类复合操作
Sublime 不支持录制鼠标宏,也不允许在 mousemap 里嵌套多个命令或加延迟。所谓“多键鼠标高级宏”,本质是绑定一个鼠标事件到一个**单一命令**,但可通过 args 和 context 注入逻辑分支。例如想让 Ctrl+左键拖选 只在 JS 文件里触发 Prettier 格式化:
[{
"button": "button1",
"modifiers": ["ctrl"],
"command": "format_code",
"args": {"profile": "prettier"},
"context": [
{"key": "selector", "operator": "equal", "operand": "source.js"}
]
}]
-
context是数组,多个条件是“且”关系;想跨语言(如 JS + TS),得拆成两条规则 -
args必须是字典,不能写成"args": "profile=prettier"这种字符串 - 注意:拖选动作本身不会被记录,mousemap 只响应“鼠标按下”那一刻的状态;拖选结束后的释放动作无法单独捕获
侧键/额外按键绑定与常见陷阱
罗技、雷蛇等鼠标侧键在 Windows 下通常映射为 button4 / button5,但部分驱动(如 Logi Options+)会劫持这些键并转为浏览器前进/后退——这时 Sublime 根本收不到原始事件。务必先在驱动软件里把侧键设为“无操作”或“发送按键”,再在 Sublime 中绑定。
- 测试是否生效:打开控制台
Ctrl+`,输入sublime.log_commands(True),然后按侧键,看有没有command: xxx输出 - 如果输出
command: drag_select或command: noop,说明键被系统或驱动吞了,不是 Sublime 配置问题 - 别指望用鼠标宏模拟键盘组合(如“侧键 → Ctrl+S”):mousemap 不支持链式调用,也不能发虚拟按键,只能触发一个原生命令
context 切换 + 合理的 args 参数传递来达成场景化响应。它不像键盘快捷键那样灵活,但足够覆盖编辑器内绝大多数鼠标增强需求。关键不是堆砌按键,而是理解 Sublime 的输入事件分发机制——鼠标动作触发的是“瞬间状态”,不是“操作流”。











