*asyncomplete.vim.txt*  Async autocompletion for Vim 8 and Neovim.
*asyncomplete*


===============================================================================
CONTENTS                                                *asyncomplete-contents*

    1. Introduction              |asyncomplete-introduction|
    2. Options                   |asyncomplete-options|
    3. Functions                 |asyncomplete-functions|
    4. Global vim configuration  |asyncomplete-global-config|
    5. Known Issues              |asyncomplete-known-issues|

===============================================================================
1. Introduction                                     *asyncomplete-introduction*

Async autocompletion for Vim 8 and Neovim with |timers|.

This is inspired by https://github.com/roxma/nvim-complete-manager but written
in pure Vim Script.

===============================================================================
2. Options                                               *asyncomplete-options*


g:asyncomplete_enable_for_all                   *g:asyncomplete_enable_for_all*

    Type |Number|
    Default: 1

    Enable asyncomplete for all buffers. Can be overriden with
    `b:asyncomplete_enable` on a per-buffer basis.  Setting this to 0 prevents
    asyncomplete from loading upon entering a buffer.

b:asyncomplete_enable                                   *b:asyncomplete_enable*

    Type |Number|
    Default: 1

    Setting this variable to 0 disables asyncomplete for the current buffer
    and overrides `g:asyncomplete_enable_for_all` .

g:asyncomplete_auto_popup                           *g:asyncomplete_auto_popup*

    Type: |Number|
    Default: `1`

    Automatically show the autocomplete popup menu as you start typing.

g:asyncomplete_log_file                               *g:asyncomplete_log_file*

    Type: |String|
    Default: null

    Path to log file.

g:asyncomplete_popup_delay                         *g:asyncomplete_popup_delay*

    Type: |Number|
    Default: 30

    Milliseconds to wait before opening the popup menu

g:asyncomplete_auto_completeopt               *g:asyncomplete_auto_completeopt*

    Type: |Number|
    Default: 1

    Set default `completeopt` options. These are `menuone,noinsert,noselect`.
    This effectively overwrites what ever the user has in their config file.

    Set to 0 to disable.

g:asyncomplete_preprocessor                        *g:asyncomplete_preprocessor*

    Type: |Array| for zero or one |Function|
    Default: []

    Set a function to allow custom filtering or sorting.
    Below example implements removing duplicates.

      function! s:my_asyncomplete_preprocessor(options, matches) abort
        let l:visited = {}
        let l:items = []
        for [l:source_name, l:matches] in items(a:matches)
          for l:item in l:matches['items']
            if stridx(l:item['word'], a:options['base']) == 0
              if !has_key(l:visited, l:item['word'])
                call add(l:items, l:item)
                let l:visited[l:item['word']] = 1
              endif
            endif
          endfor
        endfor

        call asyncomplete#preprocess_complete(a:options, l:items)
      endfunction

      let g:asyncomplete_preprocessor = [function('s:my_asyncomplete_preprocessor')]

    Note:
    asyncomplete#preprocess_complete() must be called synchronously.
    Plans to support async preprocessing will be supported in the future.

    context and matches in arguments in preprecessor function should be treated
    as immutable.

g:asyncomplete_min_chars                             *g:asyncomplete_min_chars*

    Type: |Number|
    Default: 0

    Minimum consecutive characters to trigger auto-popup. Overridden by buffer
    variable if set (`b:asyncomplete_min_chars`)

g:asyncomplete_matchfuzzy                           *g:asyncomplete_matchfuzzy*

    Type: |Number|
    Default: `exists('*matchfuzzypos')`

    Use |matchfuzzypos| to support fuzzy matching of 'word' when completing
    items. Requires vim with `matchfuzzypos()` function to exists.

    Set to `0` to disable fuzzy matching.

===============================================================================
3. Functions                                            *asyncomplete-functions*

asyncomplete#close_popup()                         *asyncomplete#close_popup()*

    Insert selected candidate and close popup menu.
    Following example prevents popup menu from re-opening after insertion.
>
    inoremap <expr> <C-y> pumvisible() ? asyncomplete#close_popup() : "\<C-y>"
<
asyncomplete#cancel_popup()                       *asyncomplete#cancel_popup()*

    Cancel completion and close popup menu.
    Following example prevents popup menu from re-opening after cancellation.
>
    inoremap <expr> <C-e> pumvisible() ? asyncomplete#cancel_popup() : "\<C-e>"
<
asyncomplete#get_source_info({source-name})    *asyncomplete#get_source_info()*

    Get the source configuration info as dict.
    Below example implements a priority sort function.
>
    function! s:sort_by_priority_preprocessor(options, matches) abort
      let l:items = []
      for [l:source_name, l:matches] in items(a:matches)
        for l:item in l:matches['items']
          if stridx(l:item['word'], a:options['base']) == 0
            let l:item['priority'] =
                \ get(asyncomplete#get_source_info(l:source_name),'priority',0)
            call add(l:items, l:item)
          endif
        endfor
      endfor

      let l:items = sort(l:items, {a, b -> b['priority'] - a['priority']})

      call asyncomplete#preprocess_complete(a:options, l:items)
    endfunction

    let g:asyncomplete_preprocessor = [function('s:sort_by_priority_preprocessor')]
<
asyncomplete#get_source_names()               *asyncomplete#get_source_names()*

    Get the registered source names list.

===============================================================================
4. Global vim configuration                          *asyncomplete-global-config*

If you notice messages like 'Pattern not found' or 'Match 1 of <N>' printed in
red colour in vim command line and in `:messages` history and you are annoyed
with them, try setting `shortmess` vim option in your `.vimrc` like so:
>
    set shortmess+=c
<
See `:help shortmess` for details and description.

===============================================================================
5. Known Issues                                       *asyncomplete-known-issues*

Builtin complete such as omni func, file func flickers and closes.
    You need vim with patch v8.1.1068.
    https://github.com/vim/vim/commit/fd133323d4e1cc9c0e61c0ce357df4d36ea148e3

===============================================================================

  vim:tw=78:ts=4:sts=4:sw=4:ft=help:norl:
