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

NeoVim中formatter.nvim配置prettier失效问题求助

解决formatter.nvim中Prettier无法工作的问题

核心问题定位

你的配置存在两个关键冲突点:

  1. --write参数与stdin=true冲突:--write会让Prettier直接修改磁盘文件,但stdin=true模式下formatter.nvim是通过标准输入传递内容、接收格式化结果后写回缓冲区,两者无法同时生效。
  2. vim.bo.textwidth可能无效:若当前缓冲区的textwidth未设置(默认值为0),传递给Prettier会导致参数错误,中断格式化流程。

修复步骤

1. 修改Prettier配置函数

移除--write参数,处理textwidth的默认情况,同时简化参数以优先使用项目配置文件:

local function prettier()
    -- 若textwidth未设置,使用默认值80
    local print_width = vim.bo.textwidth > 0 and vim.bo.textwidth or 80
    return {
        exe = "prettier", -- 若仍找不到工具,可替换为绝对路径"/usr/local/bin/prettier"
        args = {
            "--config-precedence", "prefer-file",
            "--print-width", print_width,
            "--stdin-filepath", vim.fn.shellescape(vim.api.nvim_buf_get_name(0)),
            -- 以下参数可按需保留,或移除让项目.prettierrc覆盖
            "--single-quote",
            "--no-bracket-spacing",
            "--prose-wrap", "always",
            "--arrow-parens", "always",
            "--trailing-comma", "all",
            "--no-semi",
            "--end-of-line", "lf",
        },
        stdin = true,
    }
end

2. 验证Prettier终端可用性

先确认Prettier本身能正常工作:

  • 进入项目目录,创建测试文件test.js,写入未格式化代码:
    const foo = function(){return "bar"}
    
  • 运行命令:cat test.js | prettier --stdin-filepath test.js
  • 若输出格式化后的代码,说明Prettier本身正常;若报错,检查项目.prettierrc.json是否有语法错误,或重新安装Prettier:npm install -g prettier

3. 检查NeoVim环境变量

确保NeoVim能找到Prettier:

  • 在NeoVim中运行:echo $PATH,确认/usr/local/bin在路径中;
  • 若路径缺失,可在init.lua中添加:
    vim.env.PATH = vim.env.PATH .. ":/usr/local/bin"
    

4. 查看formatter日志排查

因为你启用了logging,运行:messages查看WARN级别的日志,里面会包含Prettier的错误输出(比如参数错误、配置文件解析失败等),进一步定位问题。

可选:使用formatter自带的Prettier配置

如果自定义函数仍有问题,可直接替换为插件提供的现成配置:

javascript = { require("formatter.filetypes.javascript").prettier },
typescript = { require("formatter.filetypes.typescript").prettier },
-- 其他对应语言同理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:46:01