summaryrefslogtreecommitdiff
path: root/start/cmp/doc
diff options
context:
space:
mode:
Diffstat (limited to 'start/cmp/doc')
-rw-r--r--start/cmp/doc/cmp-nvim-lsp.txt29
-rw-r--r--start/cmp/doc/cmp.txt806
2 files changed, 835 insertions, 0 deletions
diff --git a/start/cmp/doc/cmp-nvim-lsp.txt b/start/cmp/doc/cmp-nvim-lsp.txt
new file mode 100644
index 0000000..28e3700
--- /dev/null
+++ b/start/cmp/doc/cmp-nvim-lsp.txt
@@ -0,0 +1,29 @@
+*cmp-nvim-lsp*
+
+==============================================================================
+CONTENTS *cmp-nvim-lsp-contents*
+
+FAQ |cmp-nvim-lsp-faq|
+
+
+
+==============================================================================
+FAQ *cmp-nvim-lsp-faq*
+
+How to disable specific LSP server's cmpletion?~
+
+ You can disable specific LSP server's cmpletion by adding the following
+
+>
+ require('lspconfig')[%YOUR_LSP_SERVER%].setup {
+ on_attach = function(client)
+ client.server_capabilities.completionProvider = false
+ end
+ }
+<
+
+
+
+==============================================================================
+ vim:tw=78:ts=2:et:ft=help:norl:
+
diff --git a/start/cmp/doc/cmp.txt b/start/cmp/doc/cmp.txt
new file mode 100644
index 0000000..e54f66e
--- /dev/null
+++ b/start/cmp/doc/cmp.txt
@@ -0,0 +1,806 @@
+*nvim-cmp* *cmp*
+
+A completion plugin for neovim coded in Lua.
+
+==============================================================================
+CONTENTS *cmp-contents*
+
+Abstract |cmp-abstract|
+Concept |cmp-concept|
+Usage |cmp-usage|
+Function |cmp-function|
+Mapping |cmp-mapping|
+Command |cmp-command|
+Highlight |cmp-highlight|
+Autocmd |cmp-autocmd|
+Config |cmp-config|
+Config Helper |cmp-config-helper|
+Develop |cmp-develop|
+FAQ |cmp-faq|
+==============================================================================
+Abstract *cmp-abstract*
+
+This is nvim-cmp's document.
+
+1. This help file uses the type definition notation like `{lsp,cmp,vim}.*`
+ - You can find it in `../lua/cmp/types/init.lua`.
+2. Advanced configuration is described on the wiki.
+ - https://github.com/hrsh7th/nvim-cmp/wiki
+
+==============================================================================
+Concept *cmp-concept*
+
+- Full support for LSP completion related capabilities
+- Powerful customization abilities via Lua functions
+- Smart handling of key mapping
+- No flicker
+
+==============================================================================
+Usage *cmp-usage*
+
+Recommended configuration is written below.
+ NOTE:
+ 1. You must provide `snippet.expand` function.
+ 2. `cmp.setup.cmdline` won't work if you use `native` completion menu.
+ 3. You can disable the `default` options via specifying `cmp.config.disable` value.
+>
+ 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 snippy users.
+ " Plug 'dcampos/nvim-snippy'
+ " Plug 'dcampos/cmp-snippy'
+
+ " For ultisnips users.
+ " Plug 'SirVer/ultisnips'
+ " Plug 'quangnguyen30192/cmp-nvim-ultisnips'
+
+ call plug#end()
+
+ set completeopt=menu,menuone,noselect
+
+ lua <<EOF
+ local cmp = require'cmp'
+
+ -- Global setup.
+ cmp.setup({
+ snippet = {
+ 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-d>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-f>'] = cmp.mapping.scroll_docs(4),
+ ['<C-Space>'] = cmp.mapping.complete(),
+ ['<CR>'] = cmp.mapping.confirm({ select = true }),
+ }),
+ sources = cmp.config.sources({
+ { name = 'nvim_lsp' },
+ { name = 'vsnip' }, -- For vsnip users.
+ -- { name = 'luasnip' }, -- For luasnip users.
+ -- { name = 'snippy' }, -- For snippy users.
+ -- { name = 'ultisnips' }, -- For ultisnips users.
+ }, {
+ { name = 'buffer' },
+ })
+ })
+
+ -- `/` cmdline setup.
+ cmp.setup.cmdline('/', {
+ mapping = cmp.mapping.preset.cmdline(),
+ sources = {
+ { name = 'buffer' }
+ }
+ })
+
+ -- `:` cmdline setup.
+ cmp.setup.cmdline(':', {
+ mapping = cmp.mapping.preset.cmdline(),
+ sources = cmp.config.sources({
+ { name = 'path' }
+ }, {
+ { name = 'cmdline' }
+ })
+ })
+
+ -- Setup lspconfig.
+ local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
+ require('lspconfig')[%YOUR_LSP_SERVER%].setup {
+ capabilities = capabilities
+ }
+ EOF
+<
+==============================================================================
+Function *cmp-function*
+
+NOTE: `<Cmd>lua require('cmp').complete()<CR>` can be used to call these functions in mapping.
+
+*cmp.setup* (config: cmp.ConfigSchema)
+ Setup global configuration. See configuration options.
+
+*cmp.setup.filetype* (filetype: string, config: cmp.ConfigSchema)
+ Setup filetype-specific configuration.
+
+*cmp.setup.buffer* (config: cmp.ConfigSchema)
+ Setup configuration for the current buffer.
+
+*cmp.setup.cmdline* (cmdtype: string, config: cmp.ConfigSchema)
+ Setup cmdline configuration for the specific type of cmd.
+ See |getcmdtype()|
+ NOTE: nvim-cmp does not support the `=` cmd type.
+
+*cmp.visible* ()
+ Return boolean showing whether the completion menu is visible or not.
+
+*cmp.get_entries* ()
+ Return all current entries.
+
+*cmp.get_selected_entry* ()
+ Return current selected entry (contains preselected).
+
+*cmp.get_active_entry* ()
+ Return current selected entry (without preselected).
+
+*cmp.close* ()
+ Close the completion menu.
+
+*cmp.abort* ()
+ Closes the completion menu and restore the current line to the state when it was started current completion.
+
+*cmp.select_next_item* (option: { behavior = cmp.SelectBehavior })
+ Select next item.
+
+*cmp.select_prev_item* (option: { behavior = cmp.SelectBehavior })*
+ Select previous item.
+
+*cmp.scroll_docs* (delta: number)
+ Scroll docs if visible.
+
+*cmp.complete* (option: { reason = cmp.ContextReason, config = cmp.ConfigSchema })
+ Invoke completion.
+
+ The following configurations defines the key mapping to show completion only for vsnip snippets.
+>
+ cmp.setup {
+ mapping = {
+ ['<C-s>'] = cmp.mapping.complete({
+ config = {
+ sources = {
+ { name = 'vsnip' }
+ }
+ }
+ })
+ }
+ }
+< >
+ inoremap <C-S> <Cmd>lua require('cmp').complete({ config = { sources = { { name = 'vsnip' } } } })<CR>
+<
+ NOTE: `config` in that case means a temporary setting, but `config.mapping` remains permanent.
+
+*cmp.complete_common_string* ()
+ Complete common string (reminds shell completion behavior).
+>
+ cmp.setup {
+ mapping = {
+ ['<C-l>'] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ return cmp.complete_common_string()
+ end
+ fallback()
+ end, { 'i', 'c' }),
+ }
+ }
+<
+*cmp.confirm* (option: cmp.ConfirmOption, callback: function)
+ Accepts current selected completion item.
+ If you didn't select any item and `{ select = true }` is specified for
+ this, nvim-cmp would automatically select the first item.
+
+*cmp.event:on* ('%EVENT_NAME%, callback)
+ Subscribe to nvim-cmp's event. Events are listed below.
+
+ - `complete_done`: emit after current completion is done.
+ - `confirm_done`: emit after confirmation is done.
+
+==============================================================================
+Mapping *cmp-mapping*
+
+Nvim-cmp's mapping mechanism is complex but flexible and user-friendly.
+
+You can specify the mapping function that receives the `fallback` function as argument.
+The `fallback` function can be used to call an existing mapping.
+
+For example, typical pair-wise plugin automatically defines the mappings for `<CR>` and `(`.
+Nvim-cmp might overwrite it via specified mapping.
+But you can use existing mapping via invoking the `fallback` function.
+>
+ cmp.setup {
+ mapping = {
+ ['<CR>'] = function(fallback)
+ if cmp.visible() then
+ cmp.confirm()
+ else
+ fallback() -- If you use vim-endwise, this fallback will behave as vim-endwise.
+ end
+ end
+ }
+ }
+< >
+ cmp.setup {
+ mapping = {
+ ['<Tab>'] = function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ else
+ fallback()
+ end
+ end
+ }
+ }
+<
+
+And you can specify the mapping modes.
+>
+ cmp.setup {
+ mapping = {
+ ['<CR>'] = cmp.mapping(your_mapping_function, { 'i', 'c' })
+ }
+ }
+<
+And you can specify different mappings for different modes using the same key.
+>
+ cmp.setup {
+ mapping = {
+ ['<CR>'] = cmp.mapping({
+ i = your_mapping_function_a,
+ c = your_mapping_function_b,
+ })
+ }
+ }
+<
+You can also use built-in mapping helpers.
+
+ *cmp.mapping.close* ()
+ Same as |cmp.close|.
+
+ *cmp.mapping.abort* ()
+ Same as |cmp.abort|.
+
+ *cmp.mapping.select_next_item* (option: { behavior = cmp.SelectBehavior })
+ Same as |cmp.select_next_item|.
+
+ *cmp.mapping.select_prev_item* (option: { behavior = cmp.SelectBehavior })
+ Same as |cmp.select_prev_item|.
+
+ *cmp.mapping.scroll_docs* (delta: number)
+ Same as |cmp.scroll_docs|.
+
+ *cmp.mapping.complete* (option: cmp.CompleteParams)
+ Same as |cmp.complete|.
+
+ *cmp.mapping.complete_common_string* ()
+ Same as |cmp.complete_common_string|.
+
+ *cmp.mapping.confirm* (option: cmp.ConfirmOption)
+ Same as |cmp.confirm|.
+
+Built-in mapping helpers are only available as a configuration option.
+If you want to call nvim-cmp features directly, please use |cmp-function| instead.
+
+==============================================================================
+Command *cmp-command*
+
+*CmpStatus*
+ Describes statuses and states of sources.
+ Sometimes `unknown` source will be printed but it isn't problem.
+ For that reason `cmp-nvim-lsp` registered on the InsertEnter autocmd will
+ have `unknown` status.
+
+==============================================================================
+Highlight *cmp-highlight*
+
+*CmpItemAbbr*
+ Highlights unmatched characters of each completion field.
+
+*CmpItemAbbrDeprecated*
+ Highlights unmatched characters of each deprecated completion field.
+
+*CmpItemAbbrMatch*
+ Highlights matched characters of each completion field. Matched characters
+ must form a substring of a field which share a starting position.
+
+*CmpItemAbbrMatchFuzzy*
+ Highlights fuzzy-matched characters of each completion field.
+
+*CmpItemKind*
+ Highlights kind of the field.
+
+NOTE: `kind` is a symbol after each completion option.
+
+*CmpItemKind%KIND_NAME%*
+ Highlights kind of the field for specific `lsp.CompletionItemKind`.
+ If you only want to overwrite the `method` kind's highlight group, you can do this:
+>
+ highlight CmpItemKindMethod guibg=NONE guifg=Orange
+<
+*CmpItemMenu*
+ The menu field's highlight group.
+
+==============================================================================
+Autocmd *cmp-autocmd*
+
+You can create custom autocommands for certain nvim-cmp events by defining
+autocommands for the User event with the following patterns:
+
+*CmpReady*
+ Invoked when nvim-cmp gets sourced from `plugin/cmp.lua`.
+
+==============================================================================
+Config *cmp-config*
+
+You can use the following options via `cmp.setup { ... }` .
+
+ *cmp-config.enabled*
+enabled~
+ `boolean | fun(): boolean`
+ Toggles the plugin on and off.
+
+ *cmp-config.preselect*
+preselect~
+ `cmp.PreselectMode`
+
+ 1. `cmp.PreselectMode.Item`
+ nvim-cmp will pre-select the item that the source specified.
+ 2. `cmp.PreselectMode.None`
+ nvim-cmp wouldn't pre-select any items.
+
+ *cmp-config.mapping*
+mapping~
+ `table<string, fun(fallback: function)`
+ See |cmp-mapping| section.
+
+ *cmp-config.snippet.expand*
+snippet.expand~
+ `fun(option: cmp.SnippetExpansionParams)`
+ The snippet expansion function. That's how cmp interacts with snippet engine.
+
+ *cmp-config.completion.keyword_length*
+completion.keyword_length~
+ `number`
+ The number of characters needed to trigger auto-completion.
+
+ *cmp-config.completion.keyword_pattern*
+completion.keyword_pattern~
+ `string`
+ The default keyword pattern.
+
+ *cmp-config.completion.autocomplete*
+completion.autocomplete~
+ `cmp.TriggerEvent[] | false`
+ The event to trigger autocompletion. If false specified, than completion is
+ only invoked manually.
+
+ *cmp-config.completion.completeopt*
+completion.completeopt~
+ `string`
+ The vim's completeopt-like setting. See 'completeopt'.
+ Besically, you don't need to change this.
+
+ *cmp-config.confirmation.get_commit_characters*
+confirmation.get_commit_characters~
+ `fun(commit_characters:string[]):string[]`
+ You can append or exclude commitCharacters via this configuration option function.
+ The commitCharacters is defined by LSP spec.
+
+ *cmp-config.formatting.fields*
+formatting.fields~
+ `cmp.ItemField[]`
+ The array of completion fields to specify their order.
+
+ *cmp-config.formatting.format*
+formatting.format~
+ `fun(entry: cmp.Entry, vim_item: vim.CompletedItem): vim.CompletedItem`
+ The function used to customize the completion menu appearance. See
+ |complete-items|. This value can also be used to modify `dup` property.
+ NOTE: The `vim.CompletedItem` can have special properties `abbr_hl_group`,
+ `kind_hl_group` and `menu_hl_group`.
+
+ *cmp-config.matching.disallow_fuzzy_matching*
+matching.disallow_fuzzy_matching~
+ `boolean`
+ Whether to allow fuzzy matching.
+
+ *cmp-config.matching.disallow_partial_matching*
+matching.disallow_partial_matching~
+ `boolean`
+ Whether to allow partial matching.
+
+ *cmp-config.matching.disallow_prefix_unmatching*
+matching.disallow_prefix_unmatching~
+ `boolean`
+ Whether to allow prefix unmatching.
+
+ *cmp-config.sorting.priority_weight*
+sorting.priority_weight~
+ `number`
+ Each item's original priority (given by its corresponding source) will be
+ increased by `#sources - (source_index - 1)` and multiplied by `priority_weight`.
+ That is, the final priority is calculated by the following formula:
+>
+ final_score = orig_score + ((#sources - (source_index - 1)) * sorting.priority_weight)
+<
+ *cmp-config.sorting.comparators*
+sorting.comparators~
+ `(fun(entry1: cmp.Entry, entry2: cmp.Entry): boolean | nil)[]`
+ The function to customize the sorting behavior.
+ You can use built-in comparators via `cmp.config.compare.*`.
+
+ *cmp-config.sources*
+sources~
+ `cmp.SourceConfig[]`
+ List of the sources and their configurations to use.
+ Order of the sources matters for sorting order.
+
+ *cmp-config.sources[n].name*
+sources[n].name~
+ `string`
+ The source name.
+
+ *cmp-config.sources[n].option*
+sources[n].option~
+ `table`
+ The specific options defined by the source itself.
+
+ *cmp-config.sources[n].keyword_length*
+sources[n].keyword_length~
+ `number`
+ The source specific keyword length to trigger auto completion.
+
+ *cmp-config.sources[n].keyword_pattern*
+sources[n].keyword_pattern~
+ `number`
+ The source specific keyword pattern.
+
+ *cmp-config.sources[n].trigger_characters*
+sources[n].trigger_characters~
+ `string[]`
+ The source specific keyword pattern.
+
+ *cmp-config.sources[n].priority*
+sources[n].priority~
+ `number`
+ The source specific priority value.
+
+ *cmp-config.sources[n].max_item_count*
+sources[n].max_item_count~
+ `number`
+ The source specific item count.
+
+ *cmp-config.sources[n].group_index*
+sources[n].group_index~
+ `number`
+ The source group index.
+
+ For instance, you can specify the `buffer`'s source `group_index` to bigger number
+ if you don't want to see the buffer source items when nvim-lsp source is available.
+>
+ cmp.setup {
+ sources = {
+ { name = 'nvim_lsp', group_index = 1 },
+ { name = 'buffer', group_index = 2 },
+ }
+ }
+<
+ You can specify this via the built-in configuration helper like this.
+>
+ cmp.setup {
+ sources = cmp.config.sources({
+ { name = 'nvim_lsp' },
+ }, {
+ { name = 'buffer' },
+ })
+ }
+<
+ *cmp-config.view*
+view~
+ `{ entries: cmp.EntriesConfig|string }`
+ Specify the view class to customize appearance.
+ Currently available configuration options are:
+
+ *cmp-config.window.{completion,documentation}.border*
+window.{completion,documentation}.border~
+ `string | string[] | nil`
+ Border characters used for the completion popup menu when |experimental.native_menu| is disabled.
+ See |nvim_open_win|.
+
+ *cmp-config.window.{completion,documentation}.winhighlight*
+window.{completion,documentation}.winhighlight~
+ `string | cmp.WinhighlightConfig`
+ Specify the window's winhighlight option.
+ See |nvim_open_win|.
+
+ *cmp-config.window.{completion,documentation}.zindex*
+window.{completion,documentation}.zindex~
+ `number`
+ The completion window's zindex.
+ See |nvim_open_win|.
+
+ *cmp-config.window.documentation.max_width*
+window.documentation.max_width~
+ `number`
+ The documentation window's max width.
+
+ *cmp-config.window.documentation.max_height*
+window.documentation.max_height~
+ `number`
+ The documentation window's max height.
+
+ *cmp-config.experimental.ghost_text*
+experimental.ghost_text~
+ `boolean | { hl_group = string }`
+ Whether to enable the ghost_text feature.
+
+==============================================================================
+Config Helper *cmp-config-helper*
+
+You can use the following configuration helpers:
+
+cmp.config.compare~
+
+ TBD
+
+cmp.config.context~
+
+ The `cmp.config.context` can be used for context-aware completion toggling.
+>
+ cmp.setup {
+ enabled = function()
+ -- disable completion if the cursor is `Comment` syntax group.
+ return not cmp.config.context.in_syntax_group('Comment')
+ end
+ }
+<
+ *cmp.config.context.in_syntax_group* (group)
+ You can specify the vim's built-in syntax group.
+ If you use tree-sitter, you should use `cmp.config.context.in_treesitter_capture` instead.
+
+ *cmp.config.context.in_treesitter_capture* (capture)
+ You can specify the treesitter capture name.
+ If you don't use `nvim-treesitter`, this helper doesn't work correctly.
+
+cmp.config.mapping~
+
+ See |cmp-mapping|
+
+cmp.config.sources~
+
+ *cmp.config.sources* (...sources)
+ You can specify multiple source arrays. The sources are grouped in the
+ order you specify, and the groups are displayed as a fallback, like chain
+ completion.
+>
+ cmp.setup {
+ sources = cmp.config.sources({
+ { name = 'nvim_lsp' },
+ }, {
+ { name = 'buffer' },
+ })
+ }
+<
+cmp.config.window~
+
+ *cmp.config.window.bordered* (option)
+ Make window `bordered`.
+ The option is described in `cmp.ConfigSchema`.
+>
+ cmp.setup {
+ window = {
+ completion = cmp.config.window.bordered(),
+ documentation = cmp.config.window.bordered(),
+ }
+ }
+<
+==============================================================================
+Develop *cmp-develop*
+
+Create custom source~
+
+NOTE:
+ 1. The `complete` method is required. Others can be omitted.
+ 2. The `callback` argument must always be called.
+ 3. You can use only `require('cmp')` in custom source.
+ 4. If LSP spec was changed, nvim-cmp would follow it without any announcement.
+ 5. You should read ./lua/cmp/types and https://microsoft.github.io/language-server-protocol/specifications/specification-current.
+ 6. Please add `nvim-cmp` topic for github repo.
+
+You can create custom source like the following example.
+
+>
+ local source = {}
+
+ ---Return this source is available in current context or not. (Optional)
+ ---@return boolean
+ function source:is_available()
+ return true
+ end
+
+ ---Return the debug name of this source. (Optional)
+ ---@return string
+ function source:get_debug_name()
+ return 'debug name'
+ end
+
+ ---Return keyword pattern for triggering completion. (Optional)
+ ---If this is ommited, nvim-cmp will use default keyword pattern. See |cmp-config.completion.keyword_pattern|
+ ---@return string
+ function source:get_keyword_pattern()
+ return [[\k\+]]
+ end
+
+ ---Return trigger characters for triggering completion. (Optional)
+ function source:get_trigger_characters()
+ return { '.' }
+ end
+
+ ---Invoke completion. (Required)
+ ---@param params cmp.SourceCompletionApiParams
+ ---@param callback fun(response: lsp.CompletionResponse|nil)
+ function source:complete(params, callback)
+ callback({
+ { label = 'January' },
+ { label = 'February' },
+ { label = 'March' },
+ { label = 'April' },
+ { label = 'May' },
+ { label = 'June' },
+ { label = 'July' },
+ { label = 'August' },
+ { label = 'September' },
+ { label = 'October' },
+ { label = 'November' },
+ { label = 'December' },
+ })
+ end
+
+ ---Resolve completion item. (Optional)
+ ---@param completion_item lsp.CompletionItem
+ ---@param callback fun(completion_item: lsp.CompletionItem|nil)
+ function source:resolve(completion_item, callback)
+ callback(completion_item)
+ end
+
+ ---Execute command after item was accepted.
+ ---@param completion_item lsp.CompletionItem
+ ---@param callback fun(completion_item: lsp.CompletionItem|nil)
+ function source:execute(completion_item, callback)
+ callback(completion_item)
+ end
+
+ ---Register custom source to nvim-cmp.
+ require('cmp').register_source('month', source.new())
+<
+==============================================================================
+FAQ *cmp-faq*
+
+Why does cmp automatically select a particular item? ~
+How to disable the preselect feature? ~
+
+ Nvim-cmp respects LSP(Language Server Protocol) specification.
+ The LSP spec defines the `preselect` feature for completion.
+
+ You can disable the `preselect` feature like the following.
+>
+ cmp.setup {
+ preselect = cmp.PreselectMode.None
+ }
+<
+
+Why nvim-cmp confirm item automatically?~
+How to disable commitCharacters?~
+
+ You can disable commitCharacters feature (that defined in LSP spec).
+>
+ cmp.setup {
+ confirmation = {
+ get_commit_characters = function(commit_characters)
+ return {}
+ end
+ }
+ }
+<
+
+
+How to disable auto-completion?~
+How to use nvim-cmp as like omnifunc?~
+
+ You can disable auto-completion like this.
+>
+ cmp.setup {
+ ...
+ completion = {
+ autocomplete = false
+ }
+ ...
+ }
+<
+ And you can invoke completion manually.
+>
+ inoremap <C-x><C-o> <Cmd>lua require('cmp').complete()<CR>
+<
+
+How to disable nvim-cmp on the specific buffer?~
+How to setup on the specific buffer?~
+
+ You can setup buffer specific configuration like this.
+>
+ cmp.setup.filetype({ 'markdown', 'help' }, {
+ sources = {
+ { name = 'path' },
+ { name = 'buffer' },
+ }
+ })
+<
+
+How to disable documentation window?~
+
+ You can use the following config.
+>
+ cmp.setup.filetype({ 'markdown', 'help' }, {
+ window = {
+ documentation = cmp.config.disable
+ }
+ })
+<
+
+How to integrate with copilot.vim?~
+
+ Copilot.vim and nvim-cmp both have a `key-mapping fallback` mechanism.
+ Therefore, you should manage those plugins by yourself.
+
+ Fortunately, the copilot.vim has the feature that disables the fallback mechanism.
+>
+ let g:copilot_no_tab_map = v:true
+ imap <expr> <Plug>(vimrc:copilot-dummy-map) copilot#Accept("\<Tab>")
+<
+ You can manage copilot.vim's accept feature with nvim-cmp' key-mapping configuration.
+>
+ cmp.setup {
+ mapping = {
+ ['<C-g>'] = cmp.mapping(function(fallback)
+ vim.api.nvim_feedkeys(vim.fn['copilot#Accept'](vim.api.nvim_replace_termcodes('<Tab>', true, true, true)), 'n', true)
+ end)
+ },
+ experimental = {
+ ghost_text = false -- this feature conflict with copilot.vim's preview.
+ }
+ }
+<
+
+
+How to customize menu appearance?~
+
+ You can see nvim-cmp wiki (https://github.com/hrsh7th/nvim-cmp/wiki).
+
+==============================================================================
+ vim:tw=78:ts=2:et:ft=help:norl: