如何在保存时自动格式化

How to automatically format on save

提问人:mw007 提问时间:11/12/2023 更新时间:11/12/2023 访问量:246

问:

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

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

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),所以我计划在脚本中添加更多的 autocmds。

尼奥维姆

评论


答:

1赞 mw007 11/12/2023 #1

花了更多的时间,弄清楚了如何获得我想要的功能。

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:edit