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

如何在Neovim nvim-cmp中显示自动导入的路径与来源库名

nvim-cmp 配置实现TS/JS补全项显示本地路径与第三方库来源

通过自定义nvim-cmp的formatting.format回调,直接读取LSP返回的补全项元数据即可实现需求,不需要额外安装专用插件。

完整配置代码

配置写入nvim-cmp的setup调用参数中即可生效:

local cmp = require('cmp')
local lspkind = require('lspkind') -- 已安装lspkind图标插件的前提下使用,未安装可移除相关逻辑

cmp.setup({
  -- 其余基础配置(快捷键、源配置等)保持原有内容不变
  formatting = {
    format = function(entry, vim_item)
      -- 加载默认图标配置
      vim_item.kind = lspkind.symbolic(vim_item.kind, { mode = 'symbol' })
      
      -- 仅处理TS/JS类LSP返回的补全项
      if entry.source.name == 'nvim_lsp' then
        local ok, ts_data = pcall(function()
          return entry.completion_item.data
        end)
        if ok and ts_data then
          -- 第三方npm包场景
          if ts_data.packageName then
            -- 菜单展示包名,搭配专属图标和高亮
            vim_item.menu = string.format("<%s>", ts_data.packageName)
            vim_item.kind_hl_group = "CmpThirdPartyModule"
            vim_item.kind = "📦 " .. vim_item.kind
          -- 本地模块场景
          elseif ts_data.relativePath then
            -- 菜单展示本地路径,搭配专属图标和高亮
            local short_path = ts_data.relativePath:match("([^/]+%.%w+)$") or ts_data.relativePath
            vim_item.menu = string.format("./%s", short_path)
            vim_item.kind_hl_group = "CmpLocalModule"
            vim_item.kind = "📂 " .. vim_item.kind
          end
        end
      end

      -- 其他来源补全项的默认菜单标识
      vim_item.menu = vim_item.menu or ({
        buffer = "[Buffer]",
        path = "[Path]",
        cmdline = "[Cmd]"
      })[entry.source.name]

      return vim_item
    end
  }
})

-- 自定义两类补全项的高亮样式,可根据自身配色调整色值和字体属性
vim.api.nvim_set_hl(0, "CmpThirdPartyModule", { fg = "#f7768e", bold = true })
vim.api.nvim_set_hl(0, "CmpLocalModule", { fg = "#7aa2f7", italic = true })

配置说明

  • 路径展示规则:默认本地模块仅展示文件名,需要展示完整相对路径时,移除ts_data.relativePath:match(...)的截取逻辑,直接传入ts_data.relativePath即可。
  • 视觉区分规则:示例中第三方库使用📦图标+红色加粗样式,本地模块使用📂图标+蓝色斜体样式,可自行修改图标内容、高亮参数匹配个人使用习惯。
  • LSP兼容性:配置默认适配tsserver、vtsls、typescript-tools.nvim三类主流TS/JS语言服务,若使用其他LSP实现,可在format回调中加print(vim.inspect(entry.completion_item))打印补全项结构,调整对应字段的取值逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:21:32