Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hrsh7th/nvim-cmp
A completion plugin for neovim coded in Lua.
https://github.com/hrsh7th/nvim-cmp
nvim-cmp
Last synced: 5 days ago
JSON representation
A completion plugin for neovim coded in Lua.
- Host: GitHub
- URL: https://github.com/hrsh7th/nvim-cmp
- Owner: hrsh7th
- License: mit
- Created: 2021-06-29T18:01:04.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-01-07T11:16:53.000Z (19 days ago)
- Last Synced: 2025-01-14T01:02:07.729Z (12 days ago)
- Topics: nvim-cmp
- Language: Lua
- Homepage:
- Size: 892 KB
- Stars: 8,356
- Watchers: 48
- Forks: 412
- Open Issues: 286
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-neovim - hrsh7th/nvim-cmp - A completion plugin written in Lua. New version of nvim-compe. (Completion / (requires Neovim 0.5))
- my-awesome - hrsh7th/nvim-cmp - cmp pushed_at:2025-01 star:8.4k fork:0.4k A completion plugin for neovim coded in Lua. (Lua)
README
# nvim-cmp
A completion engine plugin for neovim written in Lua.
Completion sources are installed from external repositories and "sourced".https://github.com/hrsh7th/nvim-cmp/assets/22756295/afa70011-9121-4e42-aedd-0153b630eeab
Readme!
====================1. There is a GitHub issue that documents [breaking changes](https://github.com/hrsh7th/nvim-cmp/issues/231) for nvim-cmp. Subscribe to the issue to be notified of upcoming breaking changes.
2. This is my hobby project. You can support me via GitHub sponsors.
3. Bug reports are welcome, but don't expect a fix unless you provide minimal configuration and steps to reproduce your issue.
4. The `cmp.mapping.preset.*` is pre-defined configuration that aims to mimic neovim's native like behavior. It can be changed without announcement. Please manage key-mapping by yourself.Concept
====================- Full support for LSP completion related capabilities
- Powerful customizability via Lua functions
- Smart handling of key mappings
- No flickerSetup
====================### Recommended Configuration
This example configuration uses `vim-plug` as the plugin manager and `vim-vsnip` as a snippet plugin.
```vim
call plug#begin(s:plug_dir)
Plug 'neovim/nvim-lspconfig'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'" For vsnip users.
Plug 'hrsh7th/cmp-vsnip'
Plug 'hrsh7th/vim-vsnip'" For luasnip users.
" Plug 'L3MON4D3/LuaSnip'
" Plug 'saadparwaiz1/cmp_luasnip'" For ultisnips users.
" Plug 'SirVer/ultisnips'
" Plug 'quangnguyen30192/cmp-nvim-ultisnips'" For snippy users.
" Plug 'dcampos/nvim-snippy'
" Plug 'dcampos/cmp-snippy'call plug#end()
lua <'] = cmp.mapping.scroll_docs(-4),
[''] = cmp.mapping.scroll_docs(4),
[''] = cmp.mapping.complete(),
[''] = cmp.mapping.abort(),
[''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'vsnip' }, -- For vsnip users.
-- { name = 'luasnip' }, -- For luasnip users.
-- { name = 'ultisnips' }, -- For ultisnips users.
-- { name = 'snippy' }, -- For snippy users.
}, {
{ name = 'buffer' },
})
})-- To use git you need to install the plugin petertriho/cmp-git and uncomment lines below
-- Set configuration for specific filetype.
--[[ cmp.setup.filetype('gitcommit', {
sources = cmp.config.sources({
{ name = 'git' },
}, {
{ name = 'buffer' },
})
})
require("cmp_git").setup() ]]---- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' }
}
})-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' }
}, {
{ name = 'cmdline' }
}),
matching = { disallow_symbol_nonprefix_matching = false }
})-- Set up lspconfig.
local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- Replace with each lsp server you've enabled.
require('lspconfig')[''].setup {
capabilities = capabilities
}
EOF
```### Where can I find more completion sources?
Have a look at the [Wiki](https://github.com/hrsh7th/nvim-cmp/wiki/List-of-sources) and the `nvim-cmp` [GitHub topic](https://github.com/topics/nvim-cmp).
### Where can I find advanced configuration examples?
See the [Wiki](https://github.com/hrsh7th/nvim-cmp/wiki).