Sublime Text 本身无自动排版功能,所有格式化均依赖插件调用外部 CLI 工具(如 prettier、black);reindent 仅对齐缩进,不重排结构。

Sublime Text 本身没有“自动排版”功能,所谓快捷键触发的格式化,本质是调用插件(如 JsPrettier、sublime_black)执行外部 CLI 工具;直接绑 reindent 只能对齐缩进,不能重排结构、调整空格或换行逻辑。
怎么确认你真有可用的格式化命令
很多用户绑了快捷键却没反应,第一步不是写 JSON,而是确认命令是否存在且可执行:
- 按
Ctrl+Shift+P打开命令面板,输入关键词(如 “prettier”、“black”、“format”),看是否出现对应条目——出现的完整名称才是你要的command值,比如js_prettier或sublack - 如果搜不到,说明插件没装好,或 CLI 工具(
prettier、black)没装/不在PATH中;终端运行which prettier或where black验证路径 -
reindent是内置命令,但只在语法识别正确(右下角显示JavaScript而非Plain Text)、缩进统一(全空格或全 Tab)、且未启用trim_automatic_whitespace时才生效
怎么写有效的快捷键绑定(含参数场景)
格式化类命令大多需要传参,漏掉 args 或写错字段名就会静默失败:
- 对
JsPrettier,常见写法是:[{"keys": ["alt+shift+f"], "command": "js_prettier", "args": {"auto_save": false}}] - 对
sublime_black,可能需指定 Python 解释器路径:{"keys": ["ctrl+alt+b"], "command": "sublack", "args": {"python_executable": "/usr/bin/python3"}} - 用
reindent时无需args,但必须确保当前文件语法 scope 正确;可在快捷键里加context限定,避免在 Markdown 里误触:{"keys": ["ctrl+shift+i"], "command": "reindent", "context": [{"key": "selector", "operator": "equal", "operand": "source.js"}]}
为什么快捷键按了没反应?三个高频卡点
不是配置没保存,而是这些地方容易被忽略:
- JSON 格式非法:User.sublime-keymap 必须是合法 JSON 数组,哪怕只加一条也要用
[ ]包裹;逗号多写、引号用中文、括号不匹配都会让整个文件失效(右下角弹红字但常被无视) - 命令被覆盖:左侧 Default 文件里已有同
keys的绑定(比如f5绑了 build),你在右侧也写["f5"]却没加context,那你的规则根本不会执行 - 插件命令依赖未就绪:比如
js_prettier要求node和prettier可执行,但 Sublime 启动时的环境变量 PATH 可能和终端不一致——此时控制台报prettier not found,得改插件设置里的node_path或用绝对路径
真正难的不是写那几行 JSON,而是搞清「谁在执行」「在哪执行」「凭什么能执行」——命令名、运行时环境、作用域限制,三者缺一不可。别急着复制网上的例子,先用 sublime.log_commands(True) 看一次真实调用,再动手配键位。











