如何为特定LSP单独设置Neovim诊断配置?
针对特定LSP单独配置Vim诊断选项
当然支持。vim.diagnostic.config的全局配置可以通过缓冲区级别的设置覆盖,实现针对特定LSP单独开启virtual_text和underline的需求。具体做法是在目标LSP的on_attach回调中,为当前缓冲区单独设置诊断选项:
首先保留你的全局诊断配置:
vim.diagnostic.config { virtual_text = false, underline = false, update_in_insert = false, float = { focusable = false, style = 'minimal', border = 'rounded', header = '', prefix = '', }, }
然后在LSP配置中,为特定服务定义专属的on_attach函数,在其中覆盖缓冲区局部的诊断设置:
local lspconfig = require('lspconfig') -- 通用的LSP附加回调,放置全局通用的快捷键绑定或操作 local base_on_attach = function(client, bufnr) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { buffer = bufnr }) end -- 针对目标LSP(比如pyright)的专属回调 local targeted_lsp_on_attach = function(client, bufnr) -- 先执行通用操作 base_on_attach(client, bufnr) -- 为当前缓冲区开启virtual_text和underline vim.diagnostic.config({ virtual_text = true, underline = true, }, { buffer = bufnr }) end -- 配置目标LSP时使用专属回调 lspconfig.pyright.setup({ on_attach = targeted_lsp_on_attach, -- 其他pyright相关配置... }) -- 其他LSP使用通用回调,继承全局诊断配置 lspconfig.tsserver.setup({ on_attach = base_on_attach, -- 其他tsserver相关配置... })
原理是vim.diagnostic.config的第二个参数支持传入buffer选项,指定配置仅作用于目标缓冲区。当特定LSP附加到文件缓冲区时,会触发on_attach回调,此时设置的诊断选项只会影响该LSP服务的文件,不会干扰全局或其他LSP的配置。
内容的提问来源于stack exchange,提问作者wasp256
相关产品推荐
相关产品推荐

