支持本地 LLM 补全的 vim 插件,无需 API key 即可离线提效,开发者可立即上手。
本地 LLM 辅助文本补全。
插入模式下光标移动时自动建议
用 Tab 接受建议
用 Shift+Tab 接受建议的第一行
基于指令的编辑,快捷键 <leader>lli
控制最大文本生成时间
配置光标周围的上下文范围
使用来自打开和编辑的文件以及复制文本的块环来扩展上下文
即使在低端硬件上也支持非常大的上下文,通过智能上下文重用
显示性能统计
Plug 'ggml-org/llama.vim'
cd ~/.vim/bundle
git clone https://github.com/ggml-org/llama.vim
然后在你的 .vimrc 中的 vundle#begin() 部分添加 Plugin 'llama.vim'。
{
'ggml-org/llama.vim',
}
你可以通过设置 g:llama_config 变量来自定义 llama.vim。
" put before llama.vim loads
let g:llama_config = { 'show_info': 0 }
或者直接设置:
let g:llama_config.show_info = v:false
{
'ggml-org/llama.vim',
init = function()
vim.g.llama_config = {
auto_fim = false,
}
end,
}
let g:llama_config.keymap_fim_trigger = "<leader>llf"
let g:llama_config.keymap_fim_accept_full = "<Tab>"
let g:llama_config.keymap_fim_accept_line = "<S-Tab>"
let g:llama_config.keymap_fim_accept_word = "<leader>ll]"
let g:llama_config.keymap_inst_trigger = "<leader>lli"
let g:llama_config.keymap_inst_retry = "<leader>llr"
let g:llama_config.keymap_inst_continue = "<leader>llc"
let g:llama_config.keymap_inst_accept = "<Tab>"
let g:llama_config.keymap_inst_cancel = "<Esc>"
更多选项的完整列表请参考 :help llama_config 或源代码。
该插件需要一个 llama.cpp 服务器实例运行在 g:llama_config.endpoint_fim 和/或 g:llama_config.endpoint_inst。
brew install llama.cpp
或者在 Windows 上:
winget install llama.cpp
或从源代码构建,或使用最新的二进制文件:https://github.com/ggml-org/llama.cpp/releases
根据你拥有的 VRAM 大小推荐如下设置:
超过 64GB VRAM:
llama-server --fim-qwen-30b-default
超过 16GB VRAM:
llama-server --fim-qwen-7b-default
低于 16GB VRAM:
llama-server --fim-qwen-3b-default
低于 8GB VRAM:
llama-server --fim-qwen-1.5b-default
更多细节请使用 :help llama。
该插件需要 FIM 兼容的模型:https://huggingface.co/collections/ggml-org/fim-models-66c0b4b7d1c41e7d2a893ff9
橙色文本是生成的建议。绿色文本包含 FIM 请求的性能统计数据:当前使用的上下文是 15186 个 token,最大值是 32768。环形缓冲区中有 30 个块包含额外上下文(共 64 个)。在当前会话中已驱逐 1 个块,队列中有 0 个块。对于此请求,新计算的提示 token 数为 260,生成的 token 数为 24。在当前行输入字母 c 后,生成此建议耗时 1245 毫秒。
演示全局上下文如何跨不同文件累积和维护,并展示在大型代码库中工作的总体延迟。
该插件旨在保持非常简洁和轻量的同时,提供高质量和高性能的本地 FIM 补全,即使在消费级硬件上也能表现良好。更多关于如何实现这一点的信息,请参考以下链接:
初始实现和技术描述:ggml-org/llama.cpp#9787
经典 Vim 支持:ggml-org/llama.cpp#9995