minuet-ai.nvim 怎么配置 DeepSeek 实现 FIM 代码补全?
【免费下载链接】awesome-deepseek-integrationIntegrate the DeepSeek API into popular software项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-deepseek-integration
如果你的目标是在 Neovim 里用 DeepSeek 做 Fill-in-the-middle(FIM)代码补全,可以直接使用 minuet-ai.nvim 这个插件:它对 DeepSeek、Codestral、Qwen 等兼容模型提供 FIM 补全,同时也支持以聊天模式调用兼容 OpenAI 接口的服务。完成配置后,编辑器会在你输入代码时通过 virtual text、nvim-cmp或blink-cmp前端给出补全。
开始前需要满足以下条件(均来自插件文档的 Requirements 一节):
- Neovim 0.10+;
- 依赖
plenary.nvim; - 至少一个受支持 AI 提供商的 API 密钥,本文使用 DeepSeek 的 API key;
- 前端按需二选一:
nvim-cmp或blink.cmp(两者均为可选依赖,使用 virtual text 前端时不需要它们)。
安装 minuet-ai.nvim
如果使用 Lazy.nvim,在插件列表中加入 minuet 及其必需依赖(nvim-cmp、blink.cmp两行可按你的前端选择保留或删除):
specs = { { 'milanglacier/minuet-ai.nvim', config = function() require('minuet').setup { -- 你的配置项写在这里 } end, }, { 'nvim-lua/plenary.nvim' }, -- 可选,如果你使用 virtual-text 前端,则不需要 nvim-cmp。 { 'hrsh7th/nvim-cmp' }, -- 可选,如果你使用 virtual-text 前端,则不需要 blink。 { 'Saghen/blink.cmp' }, }不使用 Lazy.nvim 的替代路径:插件在 luarocks.org 上提供,可以用 Rocks.nvim 运行Rocks install minuet-ai.nvim安装。
配置 DeepSeek 的 FIM 提供商
文档给出 DeepSeek 的两种提供商写法。要使用 FIM 补全,主路径是openai_fim_compatible:
require('minuet').setup { provider = 'openai_fim_compatible', provider_options = { openai_fim_compatible = { api_key = 'DEEPSEEK_API_KEY', name = 'deepseek', optional = { max_tokens = 256, top_p = 0.9, }, }, }, }其中api_key的'DEEPSEEK_API_KEY'是原文示例中的占位写法,需要你替换成自己的 DeepSeek API 密钥。optional块里的max_tokens、top_p按文档原样保留即可,文档未解释这两个参数的具体含义。
另一种写法是走聊天接口openai_compatible,需要额外指定 DeepSeek 的接口地址(这段配置对应的是聊天模式,不是 FIM 模式,作为文档提供的替代路径列出):
require('minuet').setup { provider = 'openai_compatible', provider_options = { openai_compatible = { end_point = 'https://api.deepseek.com/v1/chat/completions', api_key = 'DEEPSEEK_API_KEY', name = 'deepseek', optional = { max_tokens = 256, top_p = 0.9, }, }, }, }选择补全前端
三种前端任选其一。最小改动的主路径是 virtual text 前端,直接在setup中声明 keymap:
require('minuet').setup { virtualtext = { auto_trigger_ft = {}, keymap = { -- accept whole completion accept = '<A-A>', -- accept one line accept_line = '<A-a>', -- accept n lines (prompts for number) -- e.g. "A-z 2 CR" will accept 2 lines accept_n_lines = '<A-z>', -- Cycle to prev completion item, or manually invoke completion prev = '<A-[>', -- Cycle to next completion item, or manually invoke completion next = '<A-]>', dismiss = '<A-e>', }, }, }auto_trigger_ft = {}表示不为任何文件类型自动触发,需要手动调用补全;如果你要让某些文件类型自动触发,就把对应文件类型加进这个列表。
如果你已经在用nvim-cmp,把它加为补全源,并按文档建议调大fetching_timeout(文档说明 LLM 响应通常比其他补全源慢,因此建议增大超时时间;如果只需要手动补全则不需要该设置):
require('cmp').setup { sources = { { -- Include minuet as a source to enable autocompletion { name = 'minuet' }, -- and your other sources } }, performance = { fetching_timeout = 2000, }, }文档同时给出了手动触发补全的绑定方式:
-- 以下配置将 A-y 键绑定到手动调用补全 require('cmp').setup { mapping = { ["<A-y>"] = require('minuet').make_cmp_map() -- and your other keymappings }, }使用blink-cmp的可选路径:把minuet加入默认源,并配置 provider 与手动触发键:
require('blink-cmp').setup { keymap = { -- Manually invoke minuet completion. ['<A-y>'] = require('minuet').make_blink_map(), }, sources = { -- Enable minuet for autocomplete default = { 'lsp', 'path', 'buffer', 'snippets', 'minuet' }, -- For manual completion only, remove 'minuet' from default providers = { minuet = { name = 'minuet', module = 'minuet.blink', score_offset = 8, -- Gives minuet higher priority among suggestions }, }, }, -- Recommended to avoid unnecessary request completion = { trigger = { prefetch_on_insert = false } }, }其中score_offset = 8按文档注释的作用是为 minuet 的建议提供更高优先级;prefetch_on_insert = false是文档推荐项,用于避免不必要的请求。
确认补全是否生效
文档没有给出独立的日志或诊断命令,验证方式是按上面声明的交互操作补全:
- virtual text 前端:补全以虚拟文本形式显示在光标后,按
<A-A>接受整段补全、<A-a>接受一行、<A-z>后输入行数接受多行、<A-[>/<A-]>在补全项间切换、<A-e>取消。 nvim-cmp/blink-cmp前端:补全项出现在候选列表中,可正常选中接受;未自动触发时按绑定的<A-y>手动调用。
插件本身支持流式输出,文档说明这让较慢的 LLM 也能完成补全交付,因此即使响应较慢,补全也会以流式方式逐步出现。
限制与后续
- FIM 补全只适用于文档列出的兼容模型(DeepSeek、Codestral、Qwen 等);改用 DeepSeek 的聊天接口时走的是
openai_compatible路径,属于聊天模式补全,与 FIM 模式不同。 - 文档未提供针对网络失败、密钥错误的专门排错说明;如果长时间没有补全返回,可先核对 API key 是否已替换为自己的密钥、所选 provider 与 provider_options 的键是否一致(
openai_fim_compatible对应openai_fim_compatible,openai_compatible对应openai_compatible)。 - 更多配置项与多语言说明见 minuet-ai.nvim 中文文档 和 英文文档。
【免费下载链接】awesome-deepseek-integrationIntegrate the DeepSeek API into popular software项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-deepseek-integration
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考