ctrl+shift+l(windows/linux)或 cmd+shift+l(mac)是多光标核心操作,用于在每行末尾生成独立光标以同步添加标点或格式;ctrl+j仅合并选中行为空格连接,不适用于sql格式化。

Ctrl+Shift+L 多光标是核心,不是 Ctrl+J
很多人一上来就按 Ctrl+J,结果只拼了两行或根本没反应——Ctrl+J 是「合并选中行」,它不生成 SQL,也不加引号逗号,只用空格连接,且必须选中换行符才生效。真正用来批量加标点、改格式的,是 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(Mac)。
这个操作把每行末尾变成独立光标,你输入什么,所有行就同步加什么。比如处理 ID 列表:
a123 b456 c789
操作步骤:
-
Ctrl+A全选 -
Ctrl+Shift+L拆出三行光标(状态栏显示3 lines selected) - 按
End跳到行尾,输入', - 再按
Home回行首,输入'
结果直接得到:'a123','b456','c789', ——末尾多一个逗号,删掉就行。
正则替换补全 IN 语句结构,避免手拼括号
光有引号逗号还不够,SQL 的 IN 条件需要包裹在 in (...) 里,手动加容易漏括号或空格。用正则一次收尾最稳:
- 确保当前文本只有待转的值(每行一个,无空行)
-
Ctrl+H打开替换面板,勾选.*(正则模式) - 查找:
^(.+)$→ 替换:'$1'(给每行套单引号) - 再查:
\r?\n→ 替换:,(换行变逗号加空格) - 最后在开头加
in (,结尾加),注意删掉末尾多余逗号
原始:
user_001 user_002 user_003
一步到位产出:in ('user_001', 'user_002', 'user_003')
自定义命令 sql_in.py 能省事,但要注意编辑位置和权限
写个 Python 插件实现一键转换确实方便,但实际落地常卡在三个地方:
- 文件必须放在
Sublime Text 3\Data\Packages\User目录下,名字严格为SqlInCommand.py,大小写不能错 - 插件里
self.view.run_command('select_all')会清空已有选区,如果只想转局部内容,得删掉这行,改用region = self.view.sel()[0]获取当前选区 - Windows 下若提示“无法导入 sublime_plugin”,通常是文件编码不是 UTF-8 无 BOM,用 Sublime 自己另存为即可
- 快捷键配置写在
Default (Windows).sublime-keymap里,别误放到 User 目录同名文件——那个是覆盖用的,不是追加
最简可用版函数体(不自动全选):
import sublime import sublime_plugin <p>class SqlInCommand(sublime_plugin.TextCommand): def run(self, edit): region = self.view.sel()[0] lines = self.view.lines(region) result = "" for line in lines: s = self.view.substr(line).strip() if s: result += "'%s', " % s if result: result = result[:-2] # 去掉末尾 ', ' self.view.replace(edit, region, "in (%s)" % result)</p>
中文引号、空格、换行符这些隐形杀手必须先清理
从 Excel 或网页复制的数据,表面看着整齐,实际常埋雷:
- 中文单引号
‘’或全角逗号,:搜[‘’,]全部替换成英文'和, - 行尾空格或制表符:查
[ \t]+$,替换为空,否则strip()在插件里可能失效 - 混合换行符(
\r\n和\n并存):查\r\n|\r|\n,统一替换成\n,不然lines()可能漏行 - 空行干扰:查
^\s*$\n(空行加换行),替换为空,避免生成''这种非法值
这些清理动作建议做成 Sublime 的「多步宏」或固定快捷键,别每次手动重复——真正拖慢效率的,从来不是操作本身,而是反复识别和修正脏数据。











