Neovim使用`conform.nvim`或`none-Ls.nvim`实现格式化代码
该配置由ChatGPT完成,经笔者修改测试后完全可用(注释可以不看)
Conform.nvim
Lightweight yet powerful formatter plugin for Neovim (轻量但强大的Neovim代码格式化插件) —— GitHub描述
开始使用
首先,先安装conform.nvim
return {
{
"stevearc/conform.nvim", -- 安装插件
config = function()
-- 配置conform,使用black和isort格式化Python
require("conform").setup({
formatters_by_ft = {
-- python = { "black" },
python = { "black" },
lua = { 'lua-ls' },
},
})
-- 自动格式化配置
-- vim.api.nvim_create_autocmd("BufWritePre", {
-- pattern = "*.py",
-- callback = function(args)
-- require("conform").format({ bufnr = args.buf })
-- end,
-- })
end,
}
}然后保存,重新进入Neovim就可以看见lazy.nvim正在安装了。
安装代码格式化工具
以Python为例
# Arch Linux
sudo pacman -S python-black来安装black。你也可以用isort等
formatters_by_ft是一个列表,你可以添加你所用编程语言的格式化工具,如
formatters_by_ft = {
bash = { 'beautysh' },
}关于格式化工具,你可以查看:
Conform文档
或通过在Neovim中使用:help conform-formatters来查看
格式化代码
你只需要使用:lua require("conform").format()的命令来进行代码格式化。
关于保存时自动格式化,请看保存时自动格式化代码
使用none-ls.nvim
null-ls.nvim reloaded / Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. (继承null-ls.nvim/通过Lua使用Neovim作为一个语言服务器来注入LSP诊断,代码动作等等) —— GitHub描述
开始使用
首先,安装none-ls.nvim
return {
{
"nvimtools/none-ls.nvim", -- 安装none-ls.nvim插件
dependencies = { "nvim-lua/plenary.nvim" }, -- 依赖plenary.nvim
config = function()
local none_ls = require("null-ls")
-- 配置none-ls,集成black
none_ls.setup({
sources = {
none_ls.builtins.formatting.black,
},
})
-- 自动格式化配置
vim.cmd [[
augroup LspFormatting
autocmd! * <buffer>
autocmd BufWritePre *.py lua vim.lsp.buf.format()
augroup END
]]
end,
}
}然后保存,重新进入Neovim就可以看见lazy.nvim正在安装了。
安装代码格式化工具
以Python为例
# Arch Linux
sudo pacman -S python-black来安装black。你也可以用isort等
sources是一个列表,你可以添加你所用编程语言的格式化工具,如
sources = {
null_ls.builtins.formatting.stylua,
}关于格式化工具,你可以查看:
none-ls文档-内置源
格式化代码
你只需要使用:lua vim.lsp.buf.format()的命令来进行代码格式化。
关于保存时自动格式化,请看保存时自动格式化代码
保存时自动格式化代码
conform.nvim
使用该代码:
return {
{
"stevearc/conform.nvim", -- 安装插件
config = function()
-- 配置conform,使用black和isort格式化Python
require("conform").setup({
formatters_by_ft = {
-- python = { "black" },
python = { "black" },
lua = { 'lua-ls' },
},
})
-- 自动格式化配置
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*.py",
callback = function(args)
require("conform").format({ bufnr = args.buf })
end,
})
end,
}
}none-ls.nvim
使用以下代码:
return {
{
"nvimtools/none-ls.nvim", -- 安装none-ls.nvim插件
dependencies = { "nvim-lua/plenary.nvim" }, -- 依赖plenary.nvim
config = function()
local none_ls = require("null-ls")
-- 配置none-ls,集成black
none_ls.setup({
sources = {
none_ls.builtins.formatting.black,
},
})
-- 自动格式化配置
vim.cmd [[
augroup LspFormatting
autocmd! * <buffer>
autocmd BufWritePre *.py lua vim.lsp.buf.format()
augroup END
]]
end,
}
}两个切记不能同时开启!因为可能会返回不同的结果(当然使用相同的格式化工具就不会)。但是会增加占用(富哥当我没说:()。所以建议二选一即可