All Projects → hrsh7th → nvim-cmp

hrsh7th / nvim-cmp

Licence: MIT license
A completion plugin for neovim coded in Lua.

Programming Languages

lua
6591 projects
Vim Script
2826 projects

Labels

Projects that are alternatives of or similar to nvim-cmp

cmp-emoji
nvim-cmp source for emoji
Stars: ✭ 99 (-97.82%)
Mutual labels:  nvim-cmp
cmp-latex-symbols
Add latex symbol support for nvim-cmp.
Stars: ✭ 82 (-98.19%)
Mutual labels:  nvim-cmp
nvim
Structure, documented, super fast neovim configuration. 可能是翻斗花园最好用的 neovim 配置[^1]。
Stars: ✭ 223 (-95.08%)
Mutual labels:  nvim-cmp
cmp-tmux
Tmux completion source for nvim-cmp and nvim-compe
Stars: ✭ 98 (-97.84%)
Mutual labels:  nvim-cmp
nvim-fennel-lsp-conjure-as-clojure-ide
Basic config to transform your NVIM in a powerful Clojure IDE using fennel, clojure-lsp and conjure.
Stars: ✭ 144 (-96.82%)
Mutual labels:  nvim-cmp
cmp-vsnip
nvim-cmp source for vim-vsnip
Stars: ✭ 70 (-98.46%)
Mutual labels:  nvim-cmp
cmp-dictionary
nvim-cmp source for dictionary.
Stars: ✭ 60 (-98.68%)
Mutual labels:  nvim-cmp
cmp-under-comparator
nvim-cmp comparator function for completion items that start with one or more underlines
Stars: ✭ 77 (-98.3%)
Mutual labels:  nvim-cmp
cmp-treesitter
cmp source for treesitter
Stars: ✭ 69 (-98.48%)
Mutual labels:  nvim-cmp
cmp-path
nvim-cmp source for path
Stars: ✭ 137 (-96.98%)
Mutual labels:  nvim-cmp
cmp-skkeleton
skkeleton source for nvim-cmp
Stars: ✭ 12 (-99.74%)
Mutual labels:  nvim-cmp
cmp-nvim-ultisnips
nvim-cmp source for ultisnips
Stars: ✭ 61 (-98.65%)
Mutual labels:  nvim-cmp
cmp-nvim-lsp-document-symbol
nvim-cmp source for textDocument/documentSymbol via nvim-lsp.
Stars: ✭ 88 (-98.06%)
Mutual labels:  nvim-cmp
cmp-rg
ripgrep source for nvim-cmp
Stars: ✭ 165 (-96.36%)
Mutual labels:  nvim-cmp
crates.nvim
A neovim plugin that helps managing crates.io dependencies
Stars: ✭ 252 (-94.44%)
Mutual labels:  nvim-cmp
cmp-spell
spell source for nvim-cmp based on vim's spellsuggest.
Stars: ✭ 99 (-97.82%)
Mutual labels:  nvim-cmp
cmp luasnip
luasnip completion source for nvim-cmp
Stars: ✭ 290 (-93.6%)
Mutual labels:  nvim-cmp

nvim-cmp

A completion engine plugin for neovim written in Lua. Completion sources are installed from external repositories and "sourced".

Kapture.2021-10-27.at.13.32.44.mp4

Readme!

  1. There is a GitHub issue that documents breaking changes 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.

Concept

  • Full support for LSP completion related capabilities
  • Powerful customizability via Lua functions
  • Smart handling of key mappings
  • No flicker

Setup

Recommended Configuration

This example configuration uses vim-plug as the plugin manager and vim-vsnip as a snippet plugin.

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()

set completeopt=menu,menuone,noselect

lua <<EOF
  -- Set up nvim-cmp.
  local cmp = require'cmp'

  cmp.setup({
    snippet = {
      -- REQUIRED - you must specify a snippet engine
      expand = function(args)
        vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
        -- require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
        -- require('snippy').expand_snippet(args.body) -- For `snippy` users.
        -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
      end,
    },
    window = {
      -- completion = cmp.config.window.bordered(),
      -- documentation = cmp.config.window.bordered(),
    },
    mapping = cmp.mapping.preset.insert({
      ['<C-b>'] = cmp.mapping.scroll_docs(-4),
      ['<C-f>'] = cmp.mapping.scroll_docs(4),
      ['<C-Space>'] = cmp.mapping.complete(),
      ['<C-e>'] = cmp.mapping.abort(),
      ['<CR>'] = 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' },
    })
  })

  -- Set configuration for specific filetype.
  cmp.setup.filetype('gitcommit', {
    sources = cmp.config.sources({
      { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it.
    }, {
      { name = 'buffer' },
    })
  })

  -- 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' }
    })
  })

  -- Set up lspconfig.
  local capabilities = require('cmp_nvim_lsp').default_capabilities()
  -- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
  require('lspconfig')['<YOUR_LSP_SERVER>'].setup {
    capabilities = capabilities
  }
EOF

Where can I find more completion sources?

Have a look at the Wiki and the nvim-cmp GitHub topic.

Where can I find advanced configuration examples?

See the Wiki.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].