sublime text多行编辑快捷键必须通过user.sublime-keymap手动配置:用ctrl+shift+p→preferences: key bindings打开右侧用户文件,以合法json数组格式编写规则,command名须实测获取,context需精准匹配selection_empty等字段,保存即生效。

Sublime Text 多行编辑快捷键不能“设置开关”,必须通过 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 错误:, 多写了、引号没闭合、混入了中文标点。
Ctrl+D 既要选词又要复制整行,怎么共存
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"} 会干掉多光标选词功能,而且无法恢复。因为 Sublime 不支持单条规则里“或”逻辑,context 多条件是“且”关系。
想实现“无选区时复制行、有选区时继续选词”,必须拆成两条独立规则:
-
selection_empty是唯一可靠的判断字段,不是has_selection或其他变体 - 两条规则的
context必须和keys、command同级,且都包裹在同一个 JSON 数组里 - 复制整行用
"command": "duplicate_line";选词扩展用"command": "find_under_expand"
示例:
[{"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}]}]
delete_line 为什么按了没反应
Sublime 没有原生 delete_line 命令。你看到的菜单项实际走的是 run_macro_file + 路径参数。写错名,快捷键就静默失效。
最稳方法:Ctrl+Shift+P → 输入 delete line → 看命令面板里显示的条目名,那就是你要的 command 值。
更准写法是显式调用宏文件:
"command": "run_macro_file""args": {"file": "res://Packages/Default/Delete Line.sublime-macro"}- 不能省略
args字段,也不能把路径写成相对路径或本地文件路径
列选择和 Ctrl+Shift+L 总是失效,原因不在快捷键本身
列选择(竖向编辑)需要同时满足三个条件:Alt+Shift+鼠标拖动(macOS 是 Option+Shift),等宽字体,且 drag_text 设为 false。缺一不可。
Ctrl+Shift+L 不是“给当前行加光标”,而是把「已有选区」按换行符切片。它只认 \n 或 \r\n,不认空格、制表符或软换行后的视觉断行。
常见失效场景:
- 鼠标拖选时最后一行末尾没覆盖到换行符(
\n),它就当成单行处理 - 文件启用了
"translate_tabs_to_spaces": true但没重载,旧 Tab 字符未转为空格,列选卡在 Tab 边界 -
drag_text仍为true,导致Ctrl+Click触发拖动而非加光标
关键配置项必须加进用户设置:"drag_text": false。这点最容易被忽略,且不会有任何提示。











