Skip to content

ko-karol/opencode-nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

opencode.nvim

Neovim plugin for AI-powered code operations using the opencode CLI.

Select code, send it to an LLM, and get reworked code, explanations, answers, or generated tests -- all without leaving Neovim.

Requirements

  • Neovim >= 0.10
  • opencode CLI installed and in your PATH
  • Treesitter (optional, improves function detection)

Installation

{
  'ko-karol/opencode-nvim',
  config = function()
    require('opencode').setup()
  end,
}

With custom options:

{
  'ko-karol/opencode-nvim',
  config = function()
    require('opencode').setup({
      opencode_cmd = 'opencode', -- path to the opencode binary
      model = nil,               -- model override (nil = opencode default)
      keymaps = true,            -- set to false to disable default keymaps
    })
  end,
}

Keymaps

Visual mode

Keymap Description
<leader>cr Rework selected code
<leader>ce Explain selected code
<leader>ca Ask a question about selected code
<leader>ct Generate tests for selected code

Normal mode

Keymap Description
<leader>crf Rework function under cursor
<leader>cef Explain function under cursor
<leader>ctf Generate tests for function under cursor
<leader>cab Ask a question about the entire buffer

Custom keymaps

Set keymaps = false in setup and define your own:

require('opencode').setup({ keymaps = false })

local oc = require('opencode')
vim.keymap.set('v', '<leader>cr', ':<C-u>lua require("opencode").rework_visual()<CR>', { silent = true })
vim.keymap.set('n', '<leader>crf', oc.rework_function, { silent = true })
-- etc.

Commands

Command Description
:OpenCodeRework Rework visual selection (use with :'<,'>)
:OpenCodeExplain Explain visual selection
:OpenCodeAsk Ask about the current buffer
:OpenCodeTests Generate tests for visual selection

How it works

  1. Your code selection (or function/buffer) is sent to opencode run --format json with an instruction prompt
  2. The JSON event stream is parsed to extract the LLM response
  3. For rework operations: code is extracted from the markdown fenced block in the response and replaces the original lines in your buffer
  4. For explain/ask/test operations: the response is displayed in a floating window (press q or <Esc> to close)

License

MIT

About

use opencode inside nvim.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages