sublime text 的 sql 功能需插件协同:语法高亮靠 sublimelsp 的 sql 包,字段补全依赖 sqltools 连接真实数据库,dialect 设置仅影响高亮与格式化,与补全无关。

Sublime Text 本身不区分 MySQL、PostgreSQL 或 SQLite 的 SQL 语法高亮,必须靠插件+手动指定方言才能生效;补全功能更是完全依赖 SQLTools 连接真实数据库后缓存结构,不配连接就只有基础关键字提示。
SQL 关键字变色了但字段名没提示,SQLTools 没连上数据库
SQLTools 的字段级补全(比如 SELECT * FROM users 后敲 . 弹出 id、name)不是静态词典匹配,而是实时从数据库拉取表结构缓存的结果。没连上,就只显示 SELECT、WHERE 这类通用关键字。
- 按
Ctrl+Shift+P→ 输入SQLTools: New Connection创建连接,driver 必须选对:mysql、postgres、sqlite不能混用 - SQLite 连接填
database路径即可,不用host/port;MySQL/PostgreSQL 则必须确保服务在本地或远程可访问 - 连上后右下角状态栏要显示绿色
Connected,否则Ctrl+Space不会触发字段补全 - 密码含
@、/等字符时,配置里得用单引号包裹:'my@pass/word'
.sql 文件打开还是 Plain Text,缺的是 sublimelsp 的 SQL 语法包
不是插件装少了,是 Sublime 根本没加载 SQL 语法定义——右下角点开没 SQL 选项,或者点了 MySQL 子类但高亮错乱(比如括号不匹配、字符串断行失效),基本就是这个原因。
- 按
Ctrl+Shift+P→ 输入Package Control: Install Package→ 搜索并安装SQL,作者必须是sublimelsp(旧版或同名包不兼容 ST4) - 安装后重启 Sublime,再打开 .sql 文件,右下角选
SQL(注意不是MySQL或PL/SQL) - 切换成功后右键文件标签 →
Set Syntax: SQL→Apply to All Files with Same Extension - 验证:写
SELECT COUNT(*) FROM t;,SELECT和COUNT应立刻变蓝,t保持默认色(未连库时正常)
想让不同后缀用不同方言高亮,得手动绑定 + 设置 Dialect
Sublime 默认只认 .sql,像 .mysql、.psql、.sqlite 这类自定义后缀不会自动套用对应规则。SQLTools 支持按后缀切换方言,但得两步走。
- 先手动绑定后缀:打开一个
.mysql文件 → 右下角选SQL→ 右键标签 →Open all with current extension as…→SQL - 再进
Preferences → Package Settings → SQLTools → Settings,加字段:"dialect": "mysql"(可选值:mysql、postgres、sqlite、generic) - 这样
.mysql文件就能识别ENGINE=InnoDB这类 MySQL 特有语法并高亮,而.psql可设为postgres以支持RETURNING - 注意:Dialect 只影响高亮和格式化行为,不影响补全——补全仍取决于你当前连接的数据库类型
格式化快捷键 Ctrl+Alt+F 没反应,sqlparse 路径或 Python 环境错了
SQLTools 默认调用 sqlparse 做格式化,但它不自带,得自己装;而且 Sublime 内置 Python 和系统 Python 容易冲突,导致静默失败。
- 终端运行:
pip install sqlparse(推荐用系统 Python,别用 virtualenv 里的) - 进
Preferences → Package Settings → SQLTools → Settings,明确指定路径:"sqlparse_path": "/usr/local/bin/python3 -m sqlparse"(macOS/Linux)或"sqlparse_path": "C:\Python39\python.exe -m sqlparse"(Windows) - 同时确认
"formatter": "sqlparse"已启用,并在Key Bindings里加了:{"keys": ["ctrl+alt+f"], "command": "sql_tools_format"} - 遇到
OVER (PARTITION BY ...)错位,临时关掉reindent:在sqlparse_options里设"reindent": false
真正容易被忽略的是:SQLTools 的“连接”和“语法识别”是两套独立机制——连上了 PostgreSQL 却把文件设成 mysql Dialect,高亮会错,但补全仍可用;反过来,.psql 文件设对了 Dialect 却没连库,高亮正常但字段名一个都不出来。得分开调,别指望一招通吃。











