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.
- Neovim >= 0.10
- opencode CLI installed and in your
PATH - Treesitter (optional, improves function detection)
{
'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,
}| 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 |
| 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 |
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.| Command | Description |
|---|---|
:OpenCodeRework |
Rework visual selection (use with :'<,'>) |
:OpenCodeExplain |
Explain visual selection |
:OpenCodeAsk |
Ask about the current buffer |
:OpenCodeTests |
Generate tests for visual selection |
- Your code selection (or function/buffer) is sent to
opencode run --format jsonwith an instruction prompt - The JSON event stream is parsed to extract the LLM response
- For rework operations: code is extracted from the markdown fenced block in the response and replaces the original lines in your buffer
- For explain/ask/test operations: the response is displayed in a floating window (press
qor<Esc>to close)