在vim缓冲区上写入python black重新格式化:!black %和:e在一个步骤中工作

py49o6xq  于 2022-11-11  发布在  Python
关注(0)|答案(2)|浏览(138)

我希望(没有任何VIM插件)在我的VIM缓冲区上一步运行black
在Vim中编辑一些Python代码。
我只需要两个步骤就能让它工作:
第一步:

:!black %

步骤2(重新加载缓冲器):

:e

请注意,这是无效的:

:!black % |e
0lvr5msh

0lvr5msh1#

最简单的一个是

:%!black - -q
8yoxcaq7

8yoxcaq72#

通常,我们会遵循以下工作流程:
1.了解如何在shell中使用代码格式化程序作为过滤器。
1.弄清楚如何在Vim中使用该过滤器。
1.使:help gq使用该筛选器。
对于所有这些步骤,必须在浏览器窗口中打开the formatter's doc

第1步,了解如何在shell中使用代码格式化程序作为过滤器

黑色可以与标准输入一起工作:

$ black - < filename
[...]
reformatted -

All done! ✨ 🍰 ✨
1 file reformatted.

但我们能让它闭嘴吗?

$ black -q - < filename
[...]

即使在内部错误的情况下?

$ black -q 2>/dev/null - < filename
[...]

第2步,了解如何在Vim中使用该过滤器

根据:help filter,我们得到:

!<motion>
:[range]!black -q 2>/dev/null -<CR>

如果Vim有一个格式化命令,那就太酷了...

步骤3,使用该筛选器生成gq

事实上,Vim确实有一个格式化命令:gq:help gq将我们指向:help 'formatprg',从这里(以及链接的部分)我们可以得到以下内容(注意转义的空格):

set formatprg=black\ -q\ 2>/dev/null\ -

再看一下格式化程序的文档,即使我们使用标准输入,提供一个文件名似乎也是一个好主意:

set formatprg=black\ -q\ 2>/dev/null\ --stdin-filename\ %\ -

最后,因为它只对Python文件有用,所以让我们将它添加到一个自定义Python文件类型插件中:

" in after/ftplugin/python.vim
set formatprg=black\ -q\ 2>/dev/null\ --stdin-filename\ %\ -

此时,我们可以在Python缓冲区中使用内置的gq<motion>(缓冲区的一部分)或gggqG(整个缓冲区),而无需发明新的Map或命令来记忆。
从这里开始,您可能希望在写入时自动格式化缓冲区,例如,这将需要在请求帮助之前阅读:help autocommands并在您这边做一些工作。

相关问题