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

如何配置nvim-cmp在TeX文件中实现文本单词自动补全?

解决nvim-cmp在TeX文件中无法提供文本单词补全的问题

你的问题出在buffer源的默认配置上——它对TeX文件的单词识别规则不适用,导致无法提取文件内重复出现的单词作为补全候选。虽然原生的<C-x><C-n>能生效,但nvim-cmp需要明确配置适配TeX的单词匹配规则。

修改方案

调整buffer源的opts,添加keyword_pattern参数,让它能正确识别TeX文件中的单词:

{
  name = 'buffer',
  opts = {
    get_bufnrs = function()
      return vim.api.nvim_list_bufs()
    end,
    -- 适配TeX的单词匹配规则,\k对应vim的iskeyword字符集
    keyword_pattern = [[\k\+]]
  },
},

完整修改后的配置

local cmp = require 'cmp'
local luasnip = require 'luasnip'
require('luasnip.loaders.from_vscode').lazy_load()
luasnip.config.setup {}

cmp.setup {
  snippet = {
    expand = function(args)
      luasnip.lsp_expand(args.body)
    end,
  },
  mapping = cmp.mapping.preset.insert {
    ['<C-n>'] = cmp.mapping.select_next_item(),
    ['<C-p>'] = cmp.mapping.select_prev_item(),
    ['<C-d>'] = cmp.mapping.scroll_docs(-4),
    ['<C-f>'] = cmp.mapping.scroll_docs(4),
    ['<C-Space>'] = cmp.mapping.complete {},
    ['<CR>'] = cmp.mapping.confirm {
      behavior = cmp.ConfirmBehavior.Replace,
      select = true,
    },
    ['<Tab>'] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_next_item()
      elseif luasnip.expand_or_locally_jumpable() then
        luasnip.expand_or_jump()
      else
        fallback()
      end
    end, { 'i', 's' }),
    ['<S-Tab>'] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_prev_item()
      elseif luasnip.locally_jumpable(-1) then
        luasnip.jump(-1)
      else
        fallback()
      end
    end, { 'i', 's' }),
  },
  sources = {
    { name = 'nvim_lsp' },
    --{ name = 'luasnip' },
    {
      name = 'buffer',
      opts = {
        get_bufnrs = function()
          return vim.api.nvim_list_bufs()
        end,
        keyword_pattern = [[\k\+]]
      },
    },
    { name = 'path' },
  },
}

原理说明

默认的buffer源单词匹配规则可能会被TeX文件中的特殊字符(比如命令符号、下划线等)干扰,导致无法正确识别连续的英文单词。\k\+会匹配vim中iskeyword选项定义的所有字符,这和原生<C-x><C-n>的单词识别逻辑一致,因此能提取出TeX文件中重复出现的单词作为补全候选,和Lua文件中显示的"Text"标记补全效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:02:50