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

Neovim LSP功能正常但不显示错误信息,求助解决

解决Neovim LSP无法显示错误信息的问题

问题描述

笔记本设备上Neovim 0.7.2运行包含LSP配置的配置文件完全正常,能正常显示LSP错误信息;但台式机设备上,无论是Neovim 0.8.0还是降级到0.7.2,LSP功能可正常运行却无法显示错误提示。已尝试更新、重装插件,问题仍未解决。

配置代码

vim.opt.tabstop = 2
vim.cmd([[colorscheme dedsec]])
vim.cmd([[set number]])
vim.cmd([[set noswapfile]])
vim.cmd([[set mouse=a]])
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
vim.opt.expandtab = true

require("packer").startup(function(use)
 -- use "wbthompson/packer.nvim"
  use "vim-airline/vim-airline"
  use 'vim-airline/vim-airline-themes'
  use 'ryanoasis/vim-devicons'
  use 'jpalardy/vim-slime'
  use 'shime/vim-livedown'
  use 'ap/vim-css-color'
  use 'terryma/vim-multiple-cursors'
  use 'mattn/emmet-vim'
  use 'scrooloose/nerdtree'
  use 'mxw/vim-jsx'
-- LSP
  use {
    'VonHeikemen/lsp-zero.nvim',
    requires = {
      -- LSP Support
      {'neovim/nvim-lspconfig'},
      {'williamboman/mason.nvim'},
      {'williamboman/mason-lspconfig.nvim'},

      -- Autocompletion
      {'hrsh7th/nvim-cmp'},
      {'hrsh7th/cmp-buffer'},
      {'hrsh7th/cmp-path'},
      {'saadparwaiz1/cmp_luasnip'},
      {'hrsh7th/cmp-nvim-lsp'},
      {'hrsh7th/cmp-nvim-lua'},

      -- Snippets
      {'L3MON4D3/LuaSnip'},
      {'rafamadriz/friendly-snippets'},
    }
  }
end)

vim.cmd([[
  let g:airline_powerline_fonts = 1 "Включить поддержку Powerline шрифтов
let g:airline#extensions#keymap#enabled = 0 "Не показывать текущий маппинг
let g:airline_section_z = "\ue0a1:%l/%L Col:%c" "Кастомная графа положения курсора
let g:Powerline_symbols='unicode' "Поддержка unicode
let g:airline#extensions#xkblayout#enabled = 0 "Про это позже расскажу

set guioptions= "Отключаем панели прокрутки в GUI
set showtabline=1 "Отключаем панель табов (окошки FTW)
let g:slime_target = "tmux"
let g:slime_target = "neovim"

nnoremap <leader>n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-b> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>

let g:user_emmet_mode='a'

set colorcolumn=109
]])

local lsp = require('lsp-zero')

lsp.preset('recommended')
lsp.nvim_workspace()
lsp.setup()

local servers = { 'pyright', 'tsserver', 'jdtls', 'rust-analyzer', 'clangd', 'sumneko_lua'}
for _, lsp in pairs(servers) do
    require('lspconfig')[lsp].setup {
        on_attach = on_attach,
        flags = {
          debounce_text_changes = 150,
        }
    }
end

local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
for type, icon in pairs(signs) do
    local hl = "DiagnosticSign" .. type
    vim.fn.sign_define(hl, { text = icon, texthl= hl, numhl = hl })
end

效果对比

  • 正常显示(笔记本Neovim 0.7.2):
    正常显示错误信息
  • 异常显示(台式机Neovim 0.8.0/0.7.2):
    未显示错误信息

解决方案

1. 修复未定义的on_attach函数

配置中循环设置LSP服务器时使用了on_attach = on_attach,但该函数并未定义,会导致LSP初始化异常,破坏诊断显示逻辑。可二选一处理:

  • 定义基础on_attach函数:
    local on_attach = function(client, bufnr)
      -- 可添加自定义LSP快捷键,示例:
      vim.keymap.set('n', 'K', vim.lsp.buf.hover, {buffer = bufnr})
      vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {buffer = bufnr})
      -- 确保当前缓冲区启用诊断
      vim.diagnostic.enable(bufnr)
    end
    
  • 直接移除on_attach = on_attach行,使用LSP默认配置。

2. 显式配置诊断显示选项

Neovim 0.8+对诊断系统有更新,需显式开启相关显示设置,在配置末尾添加:

vim.diagnostic.config({
  virtual_text = true, -- 显示行内虚拟文本错误提示
  signs = true, -- 显示侧边栏诊断图标
  underline = true, -- 下划线标注错误行
  update_in_insert = false,
  severity_sort = true,
})

3. 避免lsp-zero与手动LSP配置冲突

lsp-zero的lsp.setup()已自动处理推荐服务器配置,手动循环调用require('lspconfig')[lsp].setup()会覆盖默认设置。改为用lsp-zero的ensure_installed管理服务器:

local lsp = require('lsp-zero')

lsp.preset('recommended')

-- 指定需要安装的LSP服务器(注意sumneko_lua已改名为lua_ls)
lsp.ensure_installed({
  'pyright', 'tsserver', 'jdtls', 'rust-analyzer', 'clangd', 'lua_ls'
})

lsp.nvim_workspace()
lsp.setup()

4. 验证字体支持

确保台式机终端安装了支持Powerline图标的字体(如JetBrains Mono Nerd Font),否则诊断图标无法显示,会误以为没有错误提示。

验证步骤

  1. 保存修改后的配置文件
  2. 重启Neovim
  3. 运行:PackerSync更新插件
  4. 打开含错误的代码文件,检查错误提示是否正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:37:08