copilot-lsp

copilot-lsp

Copilot LSP: A lightweight and extensible Neovim plugin for integrating GitHub Copilot's AI-powered code suggestions via Language Server Protocol (LSP).

Stars: 357

Visit
 screenshot

Copilot LSP is a configuration tool for Neovim that enhances the native LSP functionality. It provides features such as text document focusing, inline completion, next edit suggestion, and status notifications. Users can easily integrate Copilot LSP into their Neovim setup to improve their coding experience. The tool offers smart clearing of suggestions, customizable defaults for Next Edit Suggestion (NES), and integration with Blink for inline completions. Copilot LSP requires installation via Mason or system and should be added to the PATH for seamless usage.

README:

Copilot LSP Configuration for Neovim

Features

Done

  • TextDocument Focusing

In Progress

  • Inline Completion
  • Next Edit Suggestion
  • Uses native LSP Binary

To Do

  • [x] Sign In Flow
  • Status Notification

Usage

To use the plugin, add the following to your Neovim configuration:

return {
    "copilotlsp-nvim/copilot-lsp",
    init = function()
        vim.g.copilot_nes_debounce = 500
        vim.lsp.enable("copilot_ls")
        vim.keymap.set("n", "<tab>", function()
            local bufnr = vim.api.nvim_get_current_buf()
            local state = vim.b[bufnr].nes_state
            if state then
                -- Try to jump to the start of the suggestion edit.
                -- If already at the start, then apply the pending suggestion and jump to the end of the edit.
                local _ = require("copilot-lsp.nes").walk_cursor_start_edit()
                    or (
                        require("copilot-lsp.nes").apply_pending_nes()
                        and require("copilot-lsp.nes").walk_cursor_end_edit()
                    )
                return nil
            else
                -- Resolving the terminal's inability to distinguish between `TAB` and `<C-i>` in normal mode
                return "<C-i>"
            end
        end, { desc = "Accept Copilot NES suggestion", expr = true })
    end,
}

Clearing suggestions with Escape

You can map the <Esc> key to clear suggestions while preserving its other functionality:

-- Clear copilot suggestion with Esc if visible, otherwise preserve default Esc behavior
vim.keymap.set("n", "<esc>", function()
    if not require("copilot-lsp.nes").clear() then
        -- fallback to other functionality
    end
end, { desc = "Clear Copilot suggestion or fallback" })

Default Configuration

NES (Next Edit Suggestion) Smart Clearing

You don’t need to configure anything, but you can customize the defaults: move_count_threshold is the most important. It controls how many cursor moves happen before suggestions are cleared. Higher = slower to clear.

require('copilot-lsp').setup({
  nes = {
    move_count_threshold = 3,   -- Clear after 3 cursor movements
  }
})

Blink Integration

return {
    keymap = {
        preset = "super-tab",
        ["<Tab>"] = {
            function(cmp)
                if vim.b[vim.api.nvim_get_current_buf()].nes_state then
                    cmp.hide()
                    return (
                        require("copilot-lsp.nes").apply_pending_nes()
                        and require("copilot-lsp.nes").walk_cursor_end_edit()
                    )
                end
                if cmp.snippet_active() then
                    return cmp.accept()
                else
                    return cmp.select_and_accept()
                end
            end,
            "snippet_forward",
            "fallback",
        },
    },
}

It can also be combined with fang2hou/blink-copilot to get inline completions. Just add the completion source to your Blink configuration and it will integrate

Requirements

  • Copilot LSP installed via Mason or system and on PATH

Screenshots

NES

JS Correction Go Insertion

https://github.com/user-attachments/assets/1d5bed4a-fd0a-491f-91f3-a3335cc28682

For Tasks:

Click tags to check more tools for each tasks

For Jobs:

Alternative AI tools for copilot-lsp

Similar Open Source Tools

For similar tasks

For similar jobs