sublime text 多光标处理 sql 批量替换需精准控制光标与边界,避免误改;ctrl+d 是纯字符串匹配,非语义识别;whole word 和大小写敏感可提升准确性;列选择、home 键、(?s) 正则及 swap_selection_on_replace 设置是关键技巧。

Sublime Text 多光标处理 SQL 批量替换不是“一键全换”,而是靠精准控制光标位置和上下文边界来避免把 user_id 替成 user_id_list 或误改字符串里的 SQL 片段。
Ctrl+D 选中变量名总漏掉或多选?它根本不认语义
Ctrl+D 是纯字符串匹配,不是语法分析器。双击 user_id 后按 Ctrl+D,如果下一处是 user_id_list,它照样框进去——因为前缀完全一致。
- 务必双击选中完整标识符,确认高亮区域不含空格、引号、点号或括号
- 想只匹配独立单词:先打开查找面板(
Ctrl+F),勾选Whole Word,再输入user_id,按Alt+Enter全选 - 遇到大小写混用(如
USER_ID):在查找面板点Aa开启大小写敏感 - 跳过某处(比如 JSON 字符串里的
"user_id":):按Ctrl+K再按Ctrl+D,当前匹配项会被跳过
批量加前缀(如 COALESCE())为什么光标歪了?缩进没对齐就输内容
Ctrl+Shift+L 不是对齐工具,它只是把选区按换行符切片,光标落在每行末尾字符后——缩进不一致,光标就必然错位。
- 安全做法:先用
Ctrl+L选中目标行(确保含换行符),再按Ctrl+Shift+L - 想统一从行首插入:按
Home(不是←),所有光标会同步跳到各自行首(含缩进);再按一次Home跳过缩进 - 更稳的方式是列选择:
Shift+Alt垂直拖动(Win/Linux)或Shift+Cmd(Mac),从第一行列首拖到最后一行列首 - 列选择后不能接
Ctrl+D,必须先按Esc退出列选状态
正则跨行匹配 CREATE TABLE 总失败?. 默认不吃换行符
SQL 建表语句跨多行,普通正则里的 . 不匹配换行符,导致 ^CREATE TABLE.*;$ 只能匹配单行声明。
- 必须加
(?s)前缀启用单行模式:(?s)^CREATE TABLE.*?;$ - 用
.*?(非贪婪)比.*更安全,避免匹配到下一个;之前的所有内容 - 替换前一定点
Find看高亮数量——如果只高亮 1 处,说明正则没生效或范围不对 - 跨文件操作别用
Ctrl+H,得用Ctrl+Shift+F,Where 框填./migrations/**/*.sql(斜杠统一用/)
替换完光标全没了?默认行为就是清空多光标
执行 Replace All 后所有额外光标消失,只剩主光标——这不是 bug,是 Sublime 默认设计。
- 在用户设置(
Preferences → Settings – User)里加一行:"swap_selection_on_replace": false - 这样替换后光标仍保留,可立刻继续输入或移动
- 注意:该设置只影响多光标场景,不影响普通查找替换逻辑
- 真正危险的不是光标消失,而是你忘了自己正在操作的是纯文本——
UPDATE users SET name = 'John'里的name和SELECT name FROM里的name,Sublime 都照单全收











