我使用带有惰性的 nvim 并使用 mason、mason-lspconfig、nvim-lspconfig 如下
return {
{
"williamboman/mason.nvim",
config = function()
require("mason").setup()
end,
},
{
"williamboman/mason-lspconfig.nvim",
config = function()
require("mason-lspconfig").setup({
ensure_installed = { "lua_ls" },
})
end,
},
{
"neovim/nvim-lspconfig",
lazy = false,
config = function()
local lspconfig = require("lspconfig")
local capabilities = require("cmp_nvim_lsp").default_capabilities()
lspconfig.lua_ls.setup({
capabilities = capabilities,
})
lspconfig.clangd.setup({
capabilities = capabilities,
})
vim.keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, {})
vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
vim.keymap.set("n", "<leader>e", function()
vim.diagnostic.open_float(0, { scope = "line" })
end, {})
end,
},
}
上述设置适用于 C++,只是我无法使用 clangd 格式化代码,因此我遵循了一些指南并使用 none-ls 将 clang-format 设置为格式化程序,如下所示:
return {
"nvimtools/none-ls.nvim",
config = function()
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.formatting.stylua,
null_ls.builtins.formatting.black,
null_ls.builtins.formatting.isort,
null_ls.builtins.formatting.clang_format,
},
})
vim.keymap.set("n", "<leader>F", vim.lsp.buf.format, {})
end,
}
但是我相信 clang-format 的格式与 clangd 不同。我觉得在 vscode 中使用 clangd 格式可以使代码更易于阅读,并且大多数遗留项目都是使用这种方式格式化的,因此在应用 clang-format 时,它会创建一堆不必要的更改。
我想将 clangd 设置为类似于 vscode 设置的格式化程序,以避免不必要的更改 谢谢
在我的配置中,我依靠
lsp-zero
使用 clangd(针对 C/C++)和 rust-analyzer(针对 rust)轻松执行保存格式
config = function()
local lsp_zero = require("lsp-zero")
lsp_zero.format_on_save({
format_opts = {
async = false,
timeout_ms = 10000,
},
servers = {
['rust-analyzer'] = { 'rust' }
['clangd'] = { 'c', 'cpp' },
}
})
end