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,
    }
}

两个切记不能同时开启!因为可能会返回不同的结果(当然使用相同的格式化工具就不会)。但是会增加占用(富哥当我没说:()。所以建议二选一即可

0%