VIM可以自动缩进SQL吗?

22
"SQL语句缩进良好的实践"似乎是编写SQL块的一种被接受的格式。
是否有一个Vim缩进/语法文件可以遵循这个标准,或者至少是接近这个标准的?
当前,我的Vim几乎将所有内容左对齐,并仅缩进某些关键字。
5个回答

29

通过安装Python模块sqlparse,可以在终端中使用sqlformat命令。

pip install sqlparse

从vim中,您可以使用以下命令:

:%!sqlformat --reindent --keywords upper --identifiers lower -

为了添加一个快捷方式,pt,我在我的.vimrc配置文件中添加了以下配置:

autocmd FileType sql call SqlFormatter()
augroup end
function SqlFormatter()
    set noai
    " set mappings...
    map ,pt  :%!sqlformat --reindent --keywords upper --identifiers lower -<CR>
endfunction

您可以稍微定制sqlformat。请参见

sqlformat --help


我通过在我的 ~/.vimrc 文件中添加一行代码将 \f 映射到调用 _sqlformat_: map \f :%!sqlformat --reindent --indent_columns --keywords upper --identifiers lower -<CR> - petrus-jvrensburg
请注意,autocmd FileType sql call SqlFormatter() 只会在 SQL 文件中起作用。如果您希望在任何文件的开头调用它,以便始终可用快捷方式,请改用 nnoremap call SqlFormatter()。如果您在另一种语言中嵌入了 SQL 字符串,则可能会很有趣。由于 sqlformat 适用于整个文件,因此您需要使用另一个格式化程序,请参见 Is there a way to let sqlformat change only a selection within a file in VIM? - questionto42

11

8

3
我选择了这个解决方案… :CocCommand 可以带你进入一个模糊查找器 - 输入 sql.Format 就可以了。 - Kevin Friedheim

6
您可以使用 vim-autoformat 插件:
  • 使用您喜欢的插件管理器(我更喜欢轻量级的 vim-plug),安装 vim-autoformat 插件。
  • 使用 pip 安装 sqlparse.
  • 将以下行添加到您的 vim/nvim 配置文件中:
noremap <F3> :Autoformat<CR>
let g:formatdef_sql = '"sqlformat --reindent --keywords upper - identifiers lower -"'
let g:formatters_sql = ['sql']

如果你看到这个信息:vim has no support for python,那么你应该重新构建支持python的vim或者安装neovim的python客户端

2
Vim-autoformat 现在默认支持 sqlformat。 - chtenb

3

和Valerio的回答一样,我建议使用sqlformat,不过要用Vim内置的formatprg,默认是gq

setlocal formatprg=sqlformat\ --reindent\ --keywords\ upper\ --identifiers\ lower\ -

我在~/.vim/after/ftplugin/sql.vim文件中添加了上述代码。
这使得你可以使用Vim的内置gq命令来处理任何选择,或者针对sql中已知的Vim对象,或者只需使用gggqG重新缩进整个缓冲区。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接