
llm.nvim
在 Neovim 里直接调 LLM 写代码、改代码、问代码
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-09-26 · 当前星标 ★ 1195
技术标签
使用教程
⚠ 本教程由 AI 依据该项目 README 整理;原始文档不完整,部分步骤为通用流程推断,实际安装请以项目官方文档为准。
⚠ 该项目 README 未提供完整安装说明,以下步骤为通用流程,请以官方文档为准。
环境要求
- 已安装 Neovim,并已配置好一个插件管理器
- 可用的 LLM 后端:Hugging Face Inference API,或自建且符合 backend 规范的 HTTP endpoint
- 使用 Inference API 时需要 Hugging Face API token
- 网络可访问所配置的后端 HTTP 地址
安装与启动步骤
-
1安装插件本体
README 未给出具体插件管理器命令,可先把仓库克隆到 Neovim 插件目录;路径按自己的插件管理器调整。
git clone https://github.com/huggingface/llm.nvim.git /your/path/site/pack/plugins/start/llm.nvim -
2确定后端与凭证
插件通过 HTTP 请求调用后端,需要用 require('llm').setup 配置 backend、model 和 api_token。
-
3写入 setup 配置
在 Neovim 配置文件中加入 llm.setup,README 给出的字段可原样使用,按需修改 model 与 backend。
local llm = require('llm') llm.setup({ api_token = "sk-xxxxxxxx", model = "bigcode/starcoder2-15b", backend = "huggingface", url = nil, tokens_to_clear = { "<|endoftext|>" }, request_body = { parameters = { max_new_tokens = 60, temperature = 0.2, top_p = 0.95, }, }, fim = { enabled = true, prefix = "<fim_prefix>", middle = "<fim_middle>", suffix = "<fim_suffix>", }, debounce_ms = 150, accept_keymap = "<Tab>", dismiss_keymap = "<S-Tab>", tls_skip_verify_insecure = false, lsp = { bin_path = nil, host = nil, port = nil, cmd_env = nil, version = "0.5.3", }, tokenizer = nil, context_window = 1024, enable_suggestions_on_startup = true, enable_suggestions_on_files = "*", disable_url_path_completion = false, }) -
4按需覆盖后端地址
不想在配置里写死 url 时,可用环境变量 LLM_NVIM_URL 覆盖后端地址;url 为 nil 则走默认 Inference API 地址。
export LLM_NVIM_URL=https://your-endpoint.example.com -
5重启 Neovim 验证
保存配置后重启 Neovim,编辑文件时观察是否出现补全提示,并用 Tab / Shift-Tab 接受或忽略。
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
api_token | 是 | 调用后端所需的 API 令牌,使用 Inference API 时必填 | sk-xxxxxxxx |
model | 是 | 模型 ID,具体行为取决于所选后端 | bigcode/starcoder2-15b |
backend | 是 | 后端类型,可选 huggingface / ollama / openai / tgi | huggingface |
url | 否 | 后端 HTTP 地址,为 nil 时使用 Inference API 默认地址 | https://your-endpoint.example.com |
lsp.version | 否 | llm-ls 后端版本,插件以 llm-ls 作为后端 | 0.5.3 |
context_window | 否 | 上下文窗口的最大 token 数,提示词会自动裁剪到该范围 | 1024 |
如何确认成功
重启 Neovim 后在文件中输入代码,若出现灰色 ghost-text 补全提示,说明插件与后端已连通。
常见问题
Q:提示被限流(rate limited)怎么办?
A:README 说明使用 Inference API 时可能遇到限制,免费额度容易被限流,可订阅 PRO 计划避免。
Q:能换成自己的模型或本地模型吗?
A:可以,把 backend 改为 ollama、openai 或 tgi,并设置对应的 model 与 url 即可。
Q:输出里带特殊标记怎么处理?
A:用 tokens_to_clear 指定要从模型输出中移除的 token,例如 <|endoftext|>。
Q:如何调整补全的触发与接受方式?
A:通过 debounce_ms 控制触发延迟,accept_keymap 与 dismiss_keymap 分别设置接受和忽略的按键。
注意事项
- README 未提供具体的插件管理器安装示例,第一条命令中的 /your/path 需替换为自己实际的 Neovim 插件目录。
- 免费版 Inference API 存在调用限制,正式使用建议订阅 PRO 计划。
- url 留空(nil)时会回落到 Inference API 的默认地址,也可用环境变量 LLM_NVIM_URL 覆盖。
核心亮点
- 纯 Lua 实现,与 Neovim 原生集成,启动和响应轻量
- 支持多后端和多模型切换,不绑定单一厂商
- 可把选中代码作为上下文,AI 返回结果能直接写回缓冲区
不足之处
- 功能相对早期,缺少类似 Copilot 的实时行内补全
- 配置项较多,新手需要一定时间调通后端和快捷键
适用场景
- 在 Neovim 中选中一段函数让 AI 解释或重构
- 写代码时直接向 LLM 提问并插入生成的代码块
- 用自定义提示词批量修改当前文件中的重复模式
替代项目
codeium.nvim、copilot.vim
上一篇:llm-vscode
下一篇:pi-jev
同类项目推荐
iphone-duo-skills
开源
让 AI 代理写出适配折叠屏 iPhone 的 iOS 代码
Agent skills for building iOS apps on iPhone Duo, Apple's first foldable iPhone — a···
fuzz4all
开源
用大模型自动生成测试输入,发现各种软件漏洞
️Fuzz4All: Universal Fuzzing with Large Language Models
deepseek-harness-desktop
开源
把 DeepSeek 编码代理装进桌面,手机还能远程看
Compact DeepSeek Harness desktop host with a native SwiftUI iPhone Remote source pre···
project-butler
开源
给 AI 编程助手装上项目记忆,告别每次从零开始
Project memory system for AI coding assistants (Claude Code, Cursor, Codex): session···
lacp
开源
给本地 AI 编码代理装上策略、记忆和回滚开关
Local-first policy, evidence, memory, and recovery controls for Claude, Codex, Herme···
untether
开源
手机遥控 AI 编程,用 Telegram 随时下发任务、审批操作
Run your coding agents from Telegram. A bridge for Claude Code, Codex, OpenCode, Pi ···
PokeTokenBar
开源
把 AI 令牌消耗变成宝可梦养成游戏,边写代码边收集精灵
Use your tokens to raise, evolve, and collect Pokémon!
docs-governance
开源
给 AI 编程代理加文档护栏,防文档腐烂、留决策证据
Claude Code、Codex 与 ChatGPT 的文档驱动开发治理插件:防文档腐烂、维护上下文与决策、···
super-dev
开源
给 AI 编程装上工程护栏,让生成代码可控可追溯
Engineering workflow layer for AI coding tools with specs, review, quality gates, an···