You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Neovim中用mason和lsp-zero配置YAML格式化工具

解决YAML格式化不生效的配置方案

问题根源分析

Golang的gopls本身集成了格式化能力,且lsp-zero默认启用LSP的格式化功能,因此保存.go文件时自动生效。而yamlls默认不提供格式化能力,你安装的yamlfmt是独立工具,需要通过null-ls桥接至Neovim的自动格式化流程才能生效。

具体配置步骤

1. 安装依赖插件

添加null-ls.nvim和mason-null-ls.nvim,用于关联Mason管理的工具与Neovim的LSP生态:

-- 以packer.nvim为例,其他插件管理器可对应调整
use {
  'jose-elias-alvarez/null-ls.nvim',
  requires = {'nvim-lua/plenary.nvim'},
}
use 'jay-babu/mason-null-ls.nvim'

2. 配置Mason关联yamlfmt

修改mason.lua,添加mason-null-ls配置,自动注册yamlfmt和yamllint:

require('mason-tool-installer').setup {
  ensure_installed = {
    -- 保留你原有的工具列表...
    'yamllint',
    'yamlfmt',
    'yamlls',
    -- 其他工具...
  }
}

-- 新增mason-null-ls配置
require('mason-null-ls').setup({
  automatic_installation = true,
  handlers = {
    yamlfmt = function(source_name, methods)
      local null_ls = require('null-ls')
      null_ls.register(null_ls.builtins.formatting.yamlfmt)
    end,
    yamllint = function(source_name, methods)
      local null_ls = require('null-ls')
      null_ls.register(null_ls.builtins.diagnostics.yamllint)
    end,
  },
})

3. 调整lsp-zero配置,启用自动格式化

修改lsp.lua,禁用yamlls的格式化能力,添加保存自动格式化逻辑:

local lsp = require("lsp-zero")

lsp.preset("recommended")

-- Fix Undefined global 'vim'
lsp.nvim_workspace()

-- 新增:禁用yamlls的格式化,避免与yamlfmt冲突
lsp.configure('yamlls', {
  capabilities = {
    documentFormattingProvider = false,
  },
})

-- 你的原有cmp配置...

lsp.set_preferences({
    suggest_lsp_servers = false,
    sign_icons = {
        error = 'E',
        warn = 'W',
        hint = 'H',
        info = 'I'
    }
})

lsp.on_attach(function(client, bufnr)
  local opts = {buffer = bufnr, remap = false}

  -- 你的原有快捷键映射...

  -- 新增:保存前自动格式化
  vim.api.nvim_create_autocmd('BufWritePre', {
    buffer = bufnr,
    callback = function()
      vim.lsp.buf.format({async = false})
    end,
  })
end)

vim.diagnostic.config({
    virtual_text = true
})

-- 新增:初始化null-ls
local null_ls = require('null-ls')
null_ls.setup({
  on_attach = lsp.get_on_attach(),
})

lsp.setup()

4. 验证配置

  • 打开YAML文件,执行:NullLsInfo,检查yamlfmt是否已注册为格式化源
  • 保存文件,确认内容是否自动格式化

额外配置(可选)

如果yamlfmt的默认格式不符合需求,可通过参数自定义规则:

null_ls.builtins.formatting.yamlfmt.with({
  extra_args = {'-config', '~/.yamlfmt'}, -- 指定自定义配置文件路径
})

内容的提问来源于stack exchange,提问作者Kingindanord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:05:33