Note: This repository is still a work in progress. The interface is subject to change without notice.
collama.nvim is a Neovim plugin that leverages Ollama to provide source code completion capabilities similar to GitHub Copilot.
- Open
main.go
in nvim. - Write package and import statements.
- Implement the main function initially.
- Write a comment for the fizzBuzz function.
- Encounter difficulties while implementing the fizzBuzz function.
- collama.nvim suggests an implementation.
- Accept the suggested implementation.
- Format the code and save.
- Exit nvim.
- Execute
main.go
- Ollama
- curl
- Install the requirements.
- Install
collama.nvim
using your preferred package manager. - Run
ollama pull qwen2.5-coder:7b
. - Add
require('collama.preset.example').setup({ model = 'qwen2.5-coder:7b' })
to your init.lua. - Add
vim.keymap.set('i', '<M-j>', require('collama.copilot').accept)
to your init.lua. - Open a file in nvim and enter insert mode. Wait for a while.
- Press
<M-j>
to accept the suggested code.
{
'yuys13/collama.nvim',
lazy = false,
config = function()
require('collama.preset.example').setup { model = 'qwen2.5-coder:7b' }
-- map accept key
vim.keymap.set('i', '<M-j>', require('collama.copilot').accept)
end,
},
{
'yuys13/collama.nvim',
lazy = false,
config = function()
---@type CollamaConfig
local config = {
model = 'qwen2.5-coder:7b',
}
local augroup = vim.api.nvim_create_augroup('my_collama_augroup', { clear = true })
-- auto execute debounced_request
vim.api.nvim_create_autocmd({ 'InsertEnter', 'CursorMovedI', 'TextChangedI' }, {
group = augroup,
callback = function()
require('collama.copilot').debounced_request(config, 1000)
end,
})
-- auto cancel
vim.api.nvim_create_autocmd({ 'InsertLeave', 'VimLeavePre' }, {
group = augroup,
callback = function()
require('collama.copilot').clear()
end,
})
-- map accept key
vim.keymap.set('i', '<M-j>', require('collama.copilot').accept)
end,
},
More customization
{
'yuys13/collama.nvim',
lazy = false,
config = function()
require('collama.preset.example').setup { model = 'qwen2.5-coder:7b' }
-- map accept key
vim.keymap.set('i', '<M-j>', require('collama.copilot').accept)
require('collama.logger').notify = require('notify').notify
end,
},
{
'yuys13/collama.nvim',
lazy = false,
config = function()
require('collama.preset.example').setup { model = 'qwen2.5-coder:7b' }
-- map accept key
vim.keymap.set('i', '<M-j>', require('collama.copilot').accept)
require('collama.logger').notify = require('fidget').notify
end,
},
{
'yuys13/collama.nvim',
lazy = false,
config = function()
require('collama.preset.example').setup { model = 'qwen2.5-coder:7b' }
-- map accept key
vim.keymap.set('i', '<M-j>', require('collama.copilot').accept)
require('collama.logger').notify = vim.notify
end,
},