VIM 运行 打开 .sql 文件时的命令
VIM run command when opening .sql files
我很难弄明白这一点。
当我在 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>
选项,我们可以为这个缓冲区设置这个映射。
您正在使用 FileType
autocmd 事件触发 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
来自 Learning Vimscript the Hard Way 的更多帮助:
我很难弄明白这一点。
当我在 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>
选项,我们可以为这个缓冲区设置这个映射。
您正在使用 FileType
autocmd 事件触发 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
来自 Learning Vimscript the Hard Way 的更多帮助: