Enhance Your Neovim Experience with coc.nvim
coc.nvim is an amazing plugin for Neovim that provides full-featured language server protocols, enhancing code completion and other features. In this blog post, we’ll introduce coc.nvim and demonstrate its wide variety of APIs with code snippets.
Introduction to coc.nvim
coc.nvim stands for “Conquer of Completion,” and it’s a language server client that brings IntelliSense-style autocompletion to Neovim. This makes coding in Neovim not only faster but also more efficient.
Essential coc.nvim APIs
Let’s explore some of the most commonly used APIs provided by coc.nvim:
1. setup()
The setup()
function initializes coc.nvim with custom configurations.
vim.cmd([[
augroup my_coc_group
autocmd!
autocmd FileType python,c,cpp,javascript let &omnifunc = 'v:lua.vim.lsp.complete'
augroup END
]])
2. registerCompletionItemProvider()
This API registers a custom completion item provider for a specific language.
let completionProvider = {
triggerCharacters: ['.', '::'],
provideCompletionItems: async (document, position) => {
return await requestCompletionItems(document, position)
}
}
coc.nvim.languages.registerCompletionItemProvider('customProvider', 'Custom', ['javascript'], completionProvider)
3. extensions
You can manage coc.nvim extensions (plugins) using this API.
call coc#add_extension('coc-json')
call coc#add_extension('coc-python')
4. services.restart()
This API allows for restarting language servers.
coc.nvim.services.restart('jedi')
5. workspace.showOutputChannel()
Displays output in the output channel of coc.nvim.
coc.nvim.workspace.showOutputChannel('git')
Creating a Simple App with coc.nvim
Let’s create a simple project setup using coc.nvim:
// Initialization
vim.cmd([[
augroup my_project_setup
autocmd!
autocmd FileType python let &omnifunc = 'v:lua.vim.lsp.complete'
augroup END
]])
// Autocompletion Provider
let completionProvider = {
triggerCharacters: ['.', '::'],
provideCompletionItems: async (document, position) => {
return [
{ label: 'MyFunction', kind: 1, detail: 'my custom function', documentation: 'This is a custom function' },
{ label: 'AnotherFunction', kind: 1, detail: 'another function', documentation: 'This is another function' }
]
}
}
coc.nvim.languages.registerCompletionItemProvider('my_provider', 'MyProvider', ['python'], completionProvider)
// Add Extensions
call coc#add_extension('coc-json')
call coc#add_extension('coc-python')
// Restart Language Server
coc.nvim.services.restart('jedi')
// Show Output
coc.nvim.workspace.showOutputChannel('git')
With this setup, you can get your project up and running with powerful autocompletion and language server support!
Hash: 03254b1770163306bfa1dfe94b8c15400fc72c475b9746b10ea8603e2fde6b5c