打开.sql文件时VIM运行命令



我很难弄清楚这一点。

当我在VIM中打开一个sql文件时,我正在尝试运行以下命令。

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

我知道这可能很容易,我想得太多了,但一直在我的_vimrc文件中尝试下面的各种变体,但运气不佳

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

编辑:当我在VIM中运行这个时,什么都没发生

:call SqlFormatter()

当我运行时,我可以在列表中看到SqlFormatter((函数:功能

目前,我的_vimrc文件中的函数看起来像,我仍然没有运气

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

让我们将其分解为组件。首先是映射:

map ,pt :%!sqlformat --reindent --keywords upper --identifiers upper -<cr>

映射的一般规则是提供一个模式,如果可以的话,使用noremap。所以这就变成了:

nnoremap ,pt :%!sqlformat --reindent --keywords upper --identifiers upper -<cr>

接下来,我们需要了解缓冲区本地映射。你的映射是全局的,这意味着一旦你打开了一个'filetype'sql的缓冲区,那么这个映射将在任何缓冲区中工作。这可能不是你想要的。通过使用<buffer>选项,我们可以仅为该缓冲区设置此映射。

您正在使用FileTypeautocmd事件来触发sql文件类型的映射。这是清理过的:

augroup SqlStuff
autocmd!
autocmd FileType sql call SqlFormatter()
augroup end
function SqlFormatter()
set noautoindent
nnoremap <buffer> ,pt :%!sqlformat --reindent --keywords upper --identifiers upper -<cr>
endfunction

此外,您可能希望避免autocmd&功能,只需将设置和映射添加到~/.vim/after/ftplugin/sql.vim

set noautoindent
nnoremap <buffer> ,pt :%!sqlformat --reindent --keywords upper --identifiers upper -<cr>

注意:我还没有测试这个映射,所以如果sqlformat有问题,那么也需要修复

有关更多帮助,请参阅:

:h :map-commands
:h :map-local
:h :autocmd
:h :augroup
:h FileType
:h after-directory

学习Vimscript的更多帮助困难的方式:

  • 基本映射
  • 模态映射
  • 严格映射
  • 缓冲区本地选项和映射
  • 自动命令
  • 自动命令组

最新更新