如何在保存时自动格式化

问题描述 投票:0回答:1

我正在尝试使用 neovim 设置保存时的自动格式。我不想使用 lsp 插件来执行此操作。

下面的示例是我尝试为 python 文件调用 black 格式化程序。

vim.api.nvim_create_augroup("AutoFormat", {})

vim.api.nvim_create_autocmd(
    "BufWritePre",
    {
        pattern = "*.py",
        group = "AutoFormat",
        callback = function()
            vim.cmd("!black --quiet %")            
            -- vim.cmd("write!")
        end,
    }
)

回调函数按预期运行,但代码未格式化。这是我在 nvim 输出区域中看到的内容。

:!black --quiet test.py
"test.py" 5L, 86B written
Press ENTER or type command to continue

我还尝试添加额外的

vim.cmd("write!")
,它在上面的示例中被注释,因为它似乎没有影响。

当我使用

!black --quiet %
手动执行命令时,缓冲区已格式化,所以我认为我有正确的命令。

我希望发生的是我用

:w
写入文件,代码被格式化并保存。这可能吗?

注意:我计划添加其他语言(Go、Rust、SQL),因此我计划向脚本添加更多自动命令。

neovim
1个回答
0
投票

在这方面花了更多时间并弄清楚如何获得我想要的功能。

vim.api.nvim_create_augroup("AutoFormat", {})

vim.api.nvim_create_autocmd(
    "BufWritePost",
    {
        pattern = "*.py",
        group = "AutoFormat",
        callback = function()
            vim.cmd("silent !black --quiet %")            
            vim.cmd("edit")
        end,
    }
)

切换到

BufWritePost
以确保文件已先保存,然后允许 black 格式化文件并使用
:edit
命令重新加载似乎可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.