如何在 Neovim 中使用 clangd 作为格式化程序?

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

我使用带有惰性的 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 设置的格式化程序,以避免不必要的更改 谢谢

c++ neovim clang-format clangd nvim-lspconfig
1个回答
0
投票

在我的配置中,我依靠

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
© www.soinside.com 2019 - 2024. All rights reserved.