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

如何禁用pylsp内置linter 解决Neovim编辑Python卡顿重复提示问题

问题概述
  • 运行环境:Neovim 0.6.1,使用nvim-lint管理pylint做代码检查,pylsp提供代码补全、悬停文档、签名帮助能力
  • 故障表现:
    • 编辑导入numpy、scipy等重型科学计算库的Python文件时,补全、悬停、签名帮助响应卡顿,单核心CPU占用达100%
    • 编辑器内出现重复的lint提示
    • 手动在pylsp配置中关闭内置linter插件后配置未生效,重复提示问题依然存在
  • 原有配置如下:
opts = {
    cmd = { "pylsp" },
    filetypes = { "python" },
    root_dir = function()
        return vim.fn.getcwd()
    end,
    single_file_support = true,
    configurationSources = {""},  -- default is pycodestyle
    rope = {extensionModules = "", ropeFolder = {} },
    plugins = {
        jedi_completion = {
            enabled = true,
            eager = true,
            cache_for = {"numpy", "scipy"}
        },
        jedi_definition = {
            enabled = true,
            follow_imports = true,
            follow_builtin_imports = true,
        },
        jedi_hover = { enabled = true },
        jedi_references = { enabled = true },
        jedi_signature_help = { enabled = true },
        jedi_symbols = { enabled = true, all_scopes = true, include_import_symbols = true },
        preload = { enabled = true, modules = {"numpy", "scipy"} },
        mccabe = { enabled = false },
        mypy = { enabled = false },
        isort = { enabled = false },
        spyder = { enabled = false },
        memestra = { enabled = false },
        pycodestyle = { enabled = false },  -- not work
        flake8 = { enabled = false },
        pyflakes = { enabled = false },
        yapf = { enabled = false },
        pylint = {
            enabled = false,
            args = {
                "-f",
                "json",
                "--rcfile=" .. "~/.pylintrc"
            }
        },
        rope = { enabled = false },
        rope_completion = { enabled = false, eager = false },
    },
}
pylsp.setup(opts)
故障原因
  1. 配置层级错误:pylsp的所有功能开关、插件配置必须放在settings.pylsp命名空间下才能被LSP客户端传递给服务端。原有配置把插件配置、configurationSources、rope配置直接平铺在opts根目录,这些配置不会被pylsp进程读取,因此内置linter始终处于开启状态,和nvim-lint运行的pylint产生重复提示。
  2. 性能参数配置不合理:开启preload模块预加载+jedi_completion.eager = true是CPU占满、响应卡顿的核心原因。numpy、scipy包含大量C扩展接口,全量解析的计算量极高;eager模式会在触发补全时提前解析所有补全项的全量信息,而非按需加载,直接阻塞LSP响应线程;预加载逻辑会在打开文件时就全量解析指定库,进一步拉高CPU占用。
  3. 存在无效配置:根目录下的rope、configurationSources不属于nvim-lspconfig的启动参数,放在根目录不会被任何程序识别。
修复方案

使用以下修正后的配置替换原有配置即可:

opts = {
    cmd = { "pylsp" },
    filetypes = { "python" },
    root_dir = function()
        return vim.fn.getcwd()
    end,
    single_file_support = true,
    -- 所有pylsp服务端配置必须放在settings.pylsp层级下
    settings = {
        pylsp = {
            configurationSources = {},
            plugins = {
                -- Jedi补全性能优化
                jedi_completion = {
                    enabled = true,
                    eager = false, -- 关闭eager预解析,选中补全项时再加载详情
                    cache_for = {"numpy", "scipy"} -- 保留重型库缓存逻辑
                },
                jedi_definition = {
                    enabled = true,
                    follow_imports = true,
                    follow_builtin_imports = true,
                },
                jedi_hover = { enabled = true },
                jedi_references = { enabled = true },
                jedi_signature_help = { enabled = true },
                jedi_symbols = { enabled = true, all_scopes = true, include_import_symbols = true },
                preload = { enabled = false }, -- 关闭模块预加载,避免打开文件时CPU打满
                -- 全量禁用pylsp内置的检查、格式化插件,避免和外部工具冲突
                mccabe = { enabled = false },
                mypy = { enabled = false },
                isort = { enabled = false },
                spyder = { enabled = false },
                memestra = { enabled = false },
                pycodestyle = { enabled = false },
                flake8 = { enabled = false },
                pyflakes = { enabled = false },
                yapf = { enabled = false },
                pylint = { enabled = false },
                rope = { enabled = false },
                rope_completion = { enabled = false },
                autopep8 = { enabled = false },
                black = { enabled = false }
            }
        }
    }
}
pylsp.setup(opts)

关键修改点说明

  • 修正配置层级:将所有pylsp服务端配置移动到settings.pylsp下,确保插件禁用规则能被服务端正确读取,彻底解决重复lint提示问题。
  • 关闭eager补全模式:补全触发时只返回补全项列表,选中对应项时再加载文档、签名信息,大幅降低重型库场景下的补全延迟。
  • 关闭预加载功能:取消打开文件时对numpy、scipy的全量解析,依赖jedi自带的缓存机制,首次访问接口后自动缓存结果,不会影响后续使用速度。
  • 补全autopep8、black两个默认可能开启的格式化插件的禁用规则,避免后续和独立格式化工具产生冲突。
配置生效验证

重启Neovim后打开任意Python文件,执行以下命令查看pylsp实际加载的配置:

:LspInfo

确认pylsp处于已附加状态后,执行以下命令打印服务端配置,检查plugins下所有linter、格式化插件的enabled字段均为false即代表配置生效:

:lua print(vim.inspect(vim.lsp.get_active_clients({name = "pylsp"})[1].settings))

生效后编辑numpy、scipy文件时CPU占用会回落至正常水平,补全响应延迟可控制在100ms内,重复lint提示会完全消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.09 16:15:43