在emacs中获得sql的自动补全
背景
工作中需要写大量的sql语句,
但 datagrip
免费版需要注册账户才能使用,比较麻烦,也不再有重复性.
其他的DB工具异常难用,无论是键位设置还是自动补全功能都十分孱弱.
偶然得知emacs中sql拥有了lsp的支持.因此尝试.
配置
lsp的后端是以go书写的.相对来说比node,gem等方面许多.
1 | go install github.com/lighttiger2505/sqls@latest |
如果要保持最新,还是以yay安装更合适一些
emacs中需要配置
1 | (sql :variables |
此外还需要准备一个连接用的配置文件
1 | { |
官方只说文件需要保存为 .sqls/config.json
.
至于整个结构放在哪里,完全没有说清楚.(主要受到微软那垃圾的workspace概念影响)
连接配置放在项目内
最终发现
sql-lsp-sqls-workspace-config-path
的两种配置
-
workspace 放在sql文件的同级文件夹下
1
2
3
4
5
6
7.
├── sqls
│ ├── 1.sql
│ ├── 2.sql
│ └── .sqls
│ └── config.json
└── others -
root 放在项目根目录下
1
2
3
4
5
6
7
8
9.
├── .sqls
│ └── config.json
├── somesql
│ ├── 1.sql
│ └── 2.sql
└── othersql
├── 1.sql
└── 2.sql
连接配置放在项目外
根据官方的说法,可以在 $HOME/.config/sqls/config.yml
下以yaml的方式书写配置,
比如
1 | lowercaseKeywords: false |
可能需要手动配置 $XDG_CONFIG_HOME
变量为 $HOME/.config
目前linux上支持如此使用.
mac环境下,虽然能看到确实读取了该文件(故意让文件语法有错),
但报了lsp相关的错误(不理解 cancelRequest
),无法使用(mac终于是将四不像发展到了极致).
效果
- 表名,字段名的自动补全
- 命令的自动补全
- 关键词的自动大写
但依然不够好,相比datagrip缺失许多功能
- join自动补全
- 书写insert语句时的字段匹配高亮
遗留问题
- 文件很大时sqls会卡住,emacs又是单线程,只是单纯等待,也会卡.
所以在编辑大文件,比如超过1000行时,注意先切换到其他模式. - 字段名的自动补全不考虑当前光标所在行
会同时提示该文件中提到的所有表的字段