我正在尝试使用 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),因此我计划向脚本添加更多自动命令。
在这方面花了更多时间并弄清楚如何获得我想要的功能。
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
命令重新加载似乎可以工作。