sublime 的多行操作需通过 user.sublime-keymap 文件配置,唯一正确路径是 ctrl+shift+p → preferences: key bindings;必须用合法 json 数组格式,context 判断依赖 selection_empty 等字段,command 名须精准匹配(如 duplicate_line),列选择需等宽字体与正确按键组合。

Sublime 的多行操作快捷键不能“启用开关”,必须靠在 User.sublime-keymap 里写规则覆盖默认行为——写错一个引号、command 名拼错、context 没对齐层级,它就完全不响应,也不报错。
怎么打开并编辑正确的 User.sublime-keymap 文件
别手动去 Packages/User/ 目录找文件,也别改左侧的 Default (Windows).sublime-keymap。唯一可靠路径是:
- 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入Preferences: Key Bindings,回车 - 右侧那个可编辑的面板就是你要改的
User.sublime-keymap - 首次打开常为空,但必须是合法 JSON 数组:哪怕只加一条规则,也得用方括号
[ ]包裹 - 保存后立即生效,不用重启、不用 reload
右下角弹红字?90% 是 JSON 错误:逗号多写了、引号没闭合、混入了中文标点。
复制整行 / 删除整行这类操作,command 名不能靠猜
duplicate_line 和 run_macro_file 是真名,但 delete_line 不是原生命令——它实际走的是 run_macro_file 加 args.file 路径。写错名,快捷键就静默失效。
- 最稳方法:按
Ctrl+Shift+P,输入“duplicate line”或“delete line”,看到的条目名就是你要的command值 - 更准方法:按
Ctrl+`打开控制台,输sublime.log_commands(True),再从菜单点一次“删除行”,控制台会输出类似:command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"} - 复制整行直接用
"command": "duplicate_line";删除整行必须带args字段,不能省
想让 Ctrl+D 同时支持“选词”和“复制行”,得拆成两条 context 规则
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"} 会干掉多光标选词功能,而且无法恢复。
-
context多条件是“且”关系;想实现“或”,必须拆成两条独立规则 - 无选区时复制行、有选区时继续选词,要这样写:
[{"keys": ["ctrl+d"], "command": "duplicate_line", "context": [{"key": "selection_empty", "operator": "equal", "operand": true}]},
{"keys": ["ctrl+d"], "command": "find_under_expand", "context": [{"key": "selection_empty", "operator": "equal", "operand": false}]}]
-
selection_empty是关键判断字段,不是has_selection或其他变体 - 所有
context必须和keys、command同级,且包裹在数组里
列选择(竖向编辑)和 Ctrl+Shift+L 切片光标容易失效,原因不在快捷键本身
它们不是命令绑定问题,而是触发条件或选区结构不对:
-
Alt+Shift+鼠标拖动(Windows/Linux)或Option+Shift+拖动(macOS)才是列选择正确姿势;单独按Alt无效 -
Ctrl+Shift+L不是“对齐工具”,而是按换行符切片:没选中跨行内容,或漏掉最后一行的\n,它就只出一个光标 - 光标落在缩进空格上?因为你选区里包含了开头的空格或制表符
- 列选择错位?大概率是字体非等宽(比如系统 UI 字体),换成
Consolas或Fira Code立刻稳定
真正复杂的地方不是写几行 JSON,而是理解 Sublime 的光标模型——它不维护“多行编辑模式”状态,所有操作都依赖当前选区结构和上下文判断。改错一条 context,或者漏掉一个 args,行为就彻底偏移。











