llama.vim

ggml-orgMIT活跃维护

在 Vim 编辑器里接入本地 LLM 做代码和文本补全的插件,基于 llama.cpp 实现,无需联网即可获得类 Copilot 的补全体验。

Vim plugin for LLM-assisted code/text completion

v0.1.0发布于 2026-08-24 06:43 UTC2,196star132fork同步于 2026-11-07 07:31 UTC

怎么上手

由 README 提炼,执行前请确认
Plug 'ggml-org/llama.vim'
brew install llama.cpp
llama-server --fim-qwen-7b-default
硬件要求按 README 说明

README 按显存给出 llama-server 推荐模型:64GB 以上用 30B、16GB 以上用 7B、8GB 以上用 3B、不足 8GB 用 1.5B;示例在 M1 Pro 上跑 Qwen2.5-Coder 1.5B Q8_0。

8G 显存可跑16G 显存可跑支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

Vim 插件,接本地 llama.cpp 服务做 FIM 补全和指令式编辑

在 Vim 编辑器里接入本地 LLM 做代码和文本补全的插件,基于 llama.cpp 实现,无需联网即可获得类 Copilot 的补全体验。

核心能力

  • 插入模式下光标移动即自动触发 FIM 补全建议
  • Tab 接受整段建议,Shift+Tab 只接受首行
  • 用环形缓冲区复用打开/编辑文件与 yank 文本作为上下文
  • 支持 <leader>lli 指令式编辑,可重跑、续写、取消
  • 显示上下文 token 数、生成耗时等性能统计

容易踩的坑

插件本身不含模型,必须先自行启动 llama.cpp 的 llama-server 并配置 endpoint_fim/endpoint_inst;只能使用 FIM 兼容模型(README 给了 HuggingFace 合集);g:llama_config 需在 llama.vim 加载前设置才生效。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

1 个版本v0.1.0
  1. v0.1.0最新正式版2026-08-24 · 2026-08-24 06:43 UTC

    Overview

    New version has been released.

    More info: dist : releases and versioning of ggml-org projects

    Changelog

    (no previous release tag found)

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    llama.vim

    License: MIT Release Actions Status

    Local LLM-assisted text completion.

    Fill-in-Middle (FIM) completions

    llama vim-spec-1

    Instruction-based editing

    https://github.com/user-attachments/assets/641a6e72-f1a2-4fe5-b0fd-c2597c6f4cdc

    https://github.com/user-attachments/assets/68bff15b-2d91-4800-985d-b7f110a0ccb7


    Features

    • Auto-suggest on cursor movement in Insert mode
    • Accept a suggestion with Tab
    • Accept the first line of a suggestion with Shift+Tab
    • Instruction-based editing with <leader>lli
    • Control max text generation time
    • Configure scope of context around the cursor
    • Ring context with chunks from open and edited files and yanked text
    • Supports very large contexts even on low-end hardware via smart context reuse
    • Display performance stats

    Installation

    Plugin setup

    • vim-plug

      Plug 'ggml-org/llama.vim'
      
    • Vundle

      cd ~/.vim/bundle
      git clone https://github.com/ggml-org/llama.vim
      

      Then add Plugin 'llama.vim' to your .vimrc in the vundle#begin() section.

    • lazy.nvim

      {
          'ggml-org/llama.vim',
      }
      

    Plugin configuration

    You can customize llama.vim by setting the g:llama_config variable.

    Examples:

    1. Disable the inline info:

      " put before llama.vim loads
      let g:llama_config = { 'show_info': 0 }
      
    2. Same thing but setting directly

      let g:llama_config.show_info = v:false
      
    3. Disable auto FIM (Fill-In-the-Middle) completion with lazy.nvim

      {
          'ggml-org/llama.vim',
          init = function()
              vim.g.llama_config = {
                  auto_fim = false,
              }
          end,
      }
      
    4. Configure FIM keymaps:

      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]"
      
    5. Configure instruction-based editing keymaps

      let g:llama_config.keymap_inst_trigger  = "<leader>lli"
      let g:llama_config.keymap_inst_rerun    = "<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>"
      
    6. Configure named llama.cpp servers:

      let g:llama_config.profiles = {
          \ 'spark':   'http://192.168.0.66:8080',
          \ 'gmktec':  'http://192.168.0.65:8080',
          \ }
      let g:llama_config.profile = 'spark'
      

    Use :LlamaProfile to show the available profiles and :LlamaProfile spark to switch both FIM and instruction requests to another server. Profile names support command-line completion. The selected profile is persisted and :LlamaProfileReset can be used to restore the profile (or custom endpoints) configured in .vimrc.

    This only allows the host servers to be specified, not the models used which are configured using model_fim and model_inst. But using consistent naming accross servers, or using server aliases, one can make this independant of the actual selected profile. For example, using something like:

        \ 'model_fim':              'fim_model',
        \ 'model_inst':             'inst_model',
    

    And then in the server configuration, something like the following can be used:

    [qwen3.8-27B]
    alias                = inst_model,pi
    

    And likewise for the fim_model.

    Please refer to :help llama_config or the source for the full list of options.

    llama.cpp setup

    The plugin requires a llama.cpp server instance to be running at g:llama_config.endpoint_fim and/or g:llama_config.endpoint_inst.

    Mac OS
    brew install llama.cpp
    
    Windows
    winget install llama.cpp
    
    Any other OS

    Either build from source or use the latest binaries: https://github.com/ggml-org/llama.cpp/releases

    llama.cpp settings

    Here are recommended settings, depending on the amount of VRAM that you have:

    • More than 64GB VRAM:

      llama-server --fim-qwen-30b-default
      
    • More than 16GB VRAM:

      llama-server --fim-qwen-7b-default
      
    • Less than 16GB VRAM:

      llama-server --fim-qwen-3b-default
      
    • Less than 8GB VRAM:

      llama-server --fim-qwen-1.5b-default
      

    Use :help llama for more details.

    Recommended LLMs

    The plugin requires FIM-compatible models: HF collection

    Examples

    Using llama.vim on M1 Pro (2021) with Qwen2.5-Coder 1.5B Q8_0:

    The orange text is the generated suggestion. The green text contains performance stats for the FIM request: the currently used context is 15186 tokens and the maximum is 32768. There are 30 chunks in the ring buffer with extra context (out of 64). So far, 1 chunk has been evicted in the current session and there are 0 chunks in queue. The newly computed prompt tokens for this request were 260 and the generated tokens were 24. It took 1245 ms to generate this suggestion after entering the letter c on the current line.

    Using llama.vim on M2 Ultra with Qwen2.5-Coder 7B Q8_0:

    https://github.com/user-attachments/assets/1f1eb408-8ac2-4bd2-b2cf-6ab7d6816754

    Demonstrates that the global context is accumulated and maintained across different files and showcases the overall latency when working in a large codebase.

    Another example on a small Swift code

    llama vim-swift

    Implementation details

    The plugin aims to be very simple and lightweight and at the same time to provide high-quality and performant local FIM completions, even on consumer-grade hardware. Read more on how this is achieved in the following links:

    Other IDEs