Update coc.nvim to latest release
This commit is contained in:
parent
f5d92b4f36
commit
f9025b598e
29 changed files with 3776 additions and 94329 deletions
4
pack/acp/opt/coc.nvim/.github/FUNDING.yml
vendored
Normal file
4
pack/acp/opt/coc.nvim/.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
open_collective: cocnvim
|
||||||
|
patreon: chemzqm
|
45
pack/acp/opt/coc.nvim/.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
45
pack/acp/opt/coc.nvim/.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
**Warning: We will close the bug issue without the issue template and the reproduce ways.**
|
||||||
|
|
||||||
|
If you have question, please ask at https://gitter.im/neoclide/coc.nvim
|
||||||
|
|
||||||
|
If the problem related to specific language server, please checkout: https://git.io/fjCEM
|
||||||
|
|
||||||
|
If your have performance issue, checkout: https://git.io/fjCEX & https://git.io/Jfe00
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Result from CocInfo
|
||||||
|
|
||||||
|
<!--Run `:CocInfo` command and paste the content below.-->
|
||||||
|
|
||||||
|
## Describe the bug
|
||||||
|
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
## Reproduce the bug
|
||||||
|
|
||||||
|
**We will close your issue when you don't provide minimal vimrc and we can't
|
||||||
|
reproduce it**
|
||||||
|
|
||||||
|
- Create file `mini.vim` with:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
set nocompatible
|
||||||
|
set runtimepath^=/path/to/coc.nvim
|
||||||
|
filetype plugin indent on
|
||||||
|
syntax on
|
||||||
|
set hidden
|
||||||
|
```
|
||||||
|
|
||||||
|
- Start (neo)vim with command: `vim -u mini.vim`
|
||||||
|
|
||||||
|
- Operate vim.
|
||||||
|
|
||||||
|
## Screenshots (optional)
|
||||||
|
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
17
pack/acp/opt/coc.nvim/.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
17
pack/acp/opt/coc.nvim/.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
56
pack/acp/opt/coc.nvim/.github/workflows/ci.yml
vendored
Normal file
56
pack/acp/opt/coc.nvim/.github/workflows/ci.yml
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
name: coc.nvim CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
node-version: [10, 14]
|
||||||
|
|
||||||
|
env:
|
||||||
|
NODE_ENV: test
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- name: Install yarn
|
||||||
|
run: |
|
||||||
|
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: yarn install
|
||||||
|
run: |
|
||||||
|
yarn global add typescript
|
||||||
|
yarn
|
||||||
|
- name: yarn lint
|
||||||
|
run: yarn lint
|
||||||
|
- if: matrix.os == 'macos-latest'
|
||||||
|
name: yarn test on macOS
|
||||||
|
run: |
|
||||||
|
curl -LO https://github.com/neovim/neovim/releases/download/nightly/nvim-macos.tar.gz
|
||||||
|
tar xzf nvim-macos.tar.gz
|
||||||
|
export PATH="${PATH}:node_modules/.bin:$(pwd)/nvim-osx64/bin"
|
||||||
|
nvim --version
|
||||||
|
yarn test
|
||||||
|
- if: matrix.os == 'ubuntu-latest'
|
||||||
|
name: yarn test on Ubuntu
|
||||||
|
run: |
|
||||||
|
curl -LO https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz
|
||||||
|
tar xzf nvim-linux64.tar.gz
|
||||||
|
export PATH="${PATH}:node_modules/.bin:$(pwd)/nvim-linux64/bin"
|
||||||
|
nvim --version
|
||||||
|
yarn test
|
||||||
|
env:
|
||||||
|
NODE_ENV: test
|
1
pack/acp/opt/coc.nvim/.gitignore
vendored
1
pack/acp/opt/coc.nvim/.gitignore
vendored
|
@ -10,3 +10,4 @@ doc/tags
|
||||||
doc/tags-cn
|
doc/tags-cn
|
||||||
node_modules
|
node_modules
|
||||||
src/__tests__/tags
|
src/__tests__/tags
|
||||||
|
typings
|
||||||
|
|
|
@ -39,7 +39,7 @@ For [vim-plug](https://github.com/junegunn/vim-plug) users:
|
||||||
Plug 'neoclide/coc.nvim', {'branch': 'release'}
|
Plug 'neoclide/coc.nvim', {'branch': 'release'}
|
||||||
|
|
||||||
" Or build from source code by using yarn: https://yarnpkg.com
|
" Or build from source code by using yarn: https://yarnpkg.com
|
||||||
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
|
Plug 'neoclide/coc.nvim', {'branch': 'master', 'do': 'yarn install --frozen-lockfile'}
|
||||||
```
|
```
|
||||||
|
|
||||||
in your `.vimrc` or `init.vim`, then restart Vim and run `:PlugInstall`.
|
in your `.vimrc` or `init.vim`, then restart Vim and run `:PlugInstall`.
|
||||||
|
@ -91,6 +91,10 @@ possible to avoid conflict with your other plugins.
|
||||||
`:verbose imap <tab>` to make sure that your keymap has taken effect.
|
`:verbose imap <tab>` to make sure that your keymap has taken effect.
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
|
" Set internal encoding of vim, not needed on neovim, since coc.nvim using some
|
||||||
|
" unicode characters in the file autoload/float.vim
|
||||||
|
set encoding=utf-8
|
||||||
|
|
||||||
" TextEdit might fail if hidden is not set.
|
" TextEdit might fail if hidden is not set.
|
||||||
set hidden
|
set hidden
|
||||||
|
|
||||||
|
@ -207,11 +211,14 @@ xmap ac <Plug>(coc-classobj-a)
|
||||||
omap ac <Plug>(coc-classobj-a)
|
omap ac <Plug>(coc-classobj-a)
|
||||||
|
|
||||||
" Remap <C-f> and <C-b> for scroll float windows/popups.
|
" Remap <C-f> and <C-b> for scroll float windows/popups.
|
||||||
" Note coc#float#scroll works on neovim >= 0.4.3 or vim >= 8.2.0750
|
if has('nvim-0.4.0') || has('patch-8.2.0750')
|
||||||
nnoremap <nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||||
nnoremap <nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||||
inoremap <nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
||||||
inoremap <nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
||||||
|
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||||
|
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||||
|
endif
|
||||||
|
|
||||||
" Use CTRL-S for selections ranges.
|
" Use CTRL-S for selections ranges.
|
||||||
" Requires 'textDocument/selectionRange' support of language server.
|
" Requires 'textDocument/selectionRange' support of language server.
|
||||||
|
@ -276,7 +283,24 @@ Try these steps when you have problem with coc.nvim.
|
||||||
- If something is not working, [create an
|
- If something is not working, [create an
|
||||||
issue](https://github.com/neoclide/coc.nvim/issues/new).
|
issue](https://github.com/neoclide/coc.nvim/issues/new).
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/251450/57566955-fb850200-7404-11e9-960f-711673f1a461.png" width="593" height="574">
|
## Backers
|
||||||
|
|
||||||
|
[Become a backer](https://opencollective.com/cocnvim#backer) and get your image on our README on Github with a link to your site.
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/0/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/1/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/2/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/3/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/4/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/5/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/6/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/7/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/7/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/8/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/8/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/9/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/9/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/10/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/10/avatar.svg?requireActive=false"></a>
|
||||||
|
<a href="https://opencollective.com/cocnvim/backer/11/website?requireActive=false" target="_blank"><img src="https://opencollective.com/cocnvim/backer/11/avatar.svg?requireActive=false"></a>
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/cocnvim#backer" target="_blank"><img src="https://images.opencollective.com/static/images/become_backer.svg"></a>
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
let g:coc#_context = {'start': 0, 'preselect': -1,'candidates': []}
|
let g:coc#_context = {'start': 0, 'preselect': -1,'candidates': []}
|
||||||
let g:coc_user_config = get(g:, 'coc_user_config', {})
|
let g:coc_user_config = get(g:, 'coc_user_config', {})
|
||||||
let g:coc_global_extensions = get(g:, 'coc_global_extensions', [])
|
let g:coc_global_extensions = get(g:, 'coc_global_extensions', [])
|
||||||
let g:coc_cygqwin_path_prefixes = get(g:, 'coc_cygqwin_path_prefixes', {})
|
|
||||||
let g:coc_selected_text = ''
|
let g:coc_selected_text = ''
|
||||||
let g:coc_vim_commands = []
|
let g:coc_vim_commands = []
|
||||||
let s:watched_keys = []
|
let s:watched_keys = []
|
||||||
|
@ -36,14 +35,7 @@ function! coc#refresh() abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#on_enter()
|
function! coc#on_enter()
|
||||||
if !coc#rpc#ready()
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
if s:is_vim
|
|
||||||
call coc#rpc#notify('CocAutocmd', ['Enter', bufnr('%')])
|
call coc#rpc#notify('CocAutocmd', ['Enter', bufnr('%')])
|
||||||
else
|
|
||||||
call coc#rpc#request('CocAutocmd', ['Enter', bufnr('%')])
|
|
||||||
endif
|
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -102,9 +94,10 @@ endfunction
|
||||||
|
|
||||||
function! coc#_cancel()
|
function! coc#_cancel()
|
||||||
" hack for close pum
|
" hack for close pum
|
||||||
if pumvisible() && &paste != 1
|
if pumvisible()
|
||||||
let g:coc#_context = {'start': 0, 'preselect': -1,'candidates': []}
|
let g:coc#_context = {'start': 0, 'preselect': -1,'candidates': []}
|
||||||
call feedkeys("\<Plug>CocRefresh", 'i')
|
call feedkeys("\<Plug>CocRefresh", 'i')
|
||||||
|
call coc#rpc#notify('stopCompletion', [])
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
" Description: Client api used by vim8
|
" Description: Client api used by vim8
|
||||||
" Author: Qiming Zhao <chemzqm@gmail.com>
|
" Author: Qiming Zhao <chemzqm@gmail.com>
|
||||||
" Licence: MIT licence
|
" Licence: MIT licence
|
||||||
" Last Modified: June 28, 2019
|
" Last Modified: Nov 11, 2020
|
||||||
" ============================================================================
|
" ============================================================================
|
||||||
if has('nvim') | finish | endif
|
if has('nvim') | finish | endif
|
||||||
let s:funcs = {}
|
let s:funcs = {}
|
||||||
let s:prop_id = 1000
|
let s:prop_offset = get(g:, 'coc_text_prop_offset', 1000)
|
||||||
let s:namespace_id = 1
|
let s:namespace_id = 1
|
||||||
let s:namespace_cache = {}
|
let s:namespace_cache = {}
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ function! s:funcs.get_api_info()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:funcs.list_bufs()
|
function! s:funcs.list_bufs()
|
||||||
return map(getbufinfo({'buflisted': 1}), 'v:val["bufnr"]')
|
return map(getbufinfo({'bufloaded': 1}), 'v:val["bufnr"]')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:funcs.feedkeys(keys, mode, escape_csi)
|
function! s:funcs.feedkeys(keys, mode, escape_csi)
|
||||||
|
@ -240,18 +240,13 @@ function! s:funcs.buf_get_mark(bufnr, name)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:funcs.buf_add_highlight(bufnr, srcId, hlGroup, line, colStart, colEnd) abort
|
function! s:funcs.buf_add_highlight(bufnr, srcId, hlGroup, line, colStart, colEnd) abort
|
||||||
if !has('textprop')
|
if !has('textprop') || !has('patch-8.1.1719')
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr
|
let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr
|
||||||
let key = 'Coc'.a:hlGroup.(a:srcId != -1 ? a:srcId : '')
|
let type = 'CocHighlight'.a:hlGroup
|
||||||
if empty(prop_type_get(key, {'bufnr': a:bufnr}))
|
if empty(prop_type_get(type))
|
||||||
call prop_type_add(key, {'highlight': a:hlGroup, 'combine': 1, 'bufnr': a:bufnr})
|
call prop_type_add(type, {'highlight': a:hlGroup, 'combine': 1})
|
||||||
if a:srcId != -1
|
|
||||||
let cached = getbufvar(bufnr, 'prop_namespace_'.a:srcId, [])
|
|
||||||
call add(cached, key)
|
|
||||||
call setbufvar(bufnr, 'prop_namespace_'.a:srcId, cached)
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
let total = strlen(getbufline(bufnr, a:line + 1)[0])
|
let total = strlen(getbufline(bufnr, a:line + 1)[0])
|
||||||
let end = a:colEnd
|
let end = a:colEnd
|
||||||
|
@ -263,33 +258,44 @@ function! s:funcs.buf_add_highlight(bufnr, srcId, hlGroup, line, colStart, colEn
|
||||||
if end <= a:colStart
|
if end <= a:colStart
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let id = s:prop_id
|
let srcId = a:srcId
|
||||||
let s:prop_id = id + 1
|
if srcId == 0
|
||||||
|
while v:true
|
||||||
|
let srcId = srcId + 1
|
||||||
|
if empty(prop_find({'id': s:prop_offset + srcId, 'lnum' : 1}))
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
" generate srcId
|
||||||
|
endif
|
||||||
|
let id = srcId == -1 ? 0 : s:prop_offset + srcId
|
||||||
try
|
try
|
||||||
call prop_add(a:line + 1, a:colStart + 1, {'length': end - a:colStart, 'bufnr': bufnr, 'type': key, 'id': id})
|
call prop_add(a:line + 1, a:colStart + 1, {'length': end - a:colStart, 'bufnr': bufnr, 'type': type, 'id': id})
|
||||||
catch /^Vim\%((\a\+)\)\=:E967/
|
catch /^Vim\%((\a\+)\)\=:E967/
|
||||||
" ignore 967
|
" ignore 967
|
||||||
endtry
|
endtry
|
||||||
|
let g:i = srcId
|
||||||
|
if a:srcId == 0
|
||||||
|
" return generated srcId
|
||||||
|
return srcId
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:funcs.buf_clear_namespace(bufnr, srcId, startLine, endLine) abort
|
function! s:funcs.buf_clear_namespace(bufnr, srcId, startLine, endLine) abort
|
||||||
if !has('textprop')
|
if !has('textprop') || !has('patch-8.1.1719')
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr
|
||||||
|
let start = a:startLine + 1
|
||||||
|
let end = a:endLine == -1 ? len(getbufline(bufnr, 1, '$')) : a:endLine + 1
|
||||||
if a:srcId == -1
|
if a:srcId == -1
|
||||||
if a:endLine == -1
|
call prop_clear(start, end, {'bufnr' : bufnr})
|
||||||
call prop_clear(a:startLine + 1, {'bufnr': a:bufnr})
|
|
||||||
else
|
else
|
||||||
call prop_clear(a:startLine + 1, a:endLine + 1, {'bufnr': a:bufnr})
|
try
|
||||||
endif
|
call prop_remove({'bufnr': bufnr, 'all': 1, 'id': s:prop_offset + a:srcId}, start, end)
|
||||||
else
|
catch /^Vim\%((\a\+)\)\=:E968/
|
||||||
let cached = getbufvar(a:bufnr, 'prop_namespace_'.a:srcId, [])
|
" ignore 968
|
||||||
if empty(cached)
|
endtry
|
||||||
return
|
|
||||||
endif
|
|
||||||
for key in cached
|
|
||||||
call prop_remove({'type': key, 'bufnr': a:bufnr, 'all': 1})
|
|
||||||
endfor
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -72,25 +72,36 @@ function! s:start() dict
|
||||||
let self['running'] = 1
|
let self['running'] = 1
|
||||||
let self['channel'] = job_getchannel(job)
|
let self['channel'] = job_getchannel(job)
|
||||||
else
|
else
|
||||||
|
let original = {'tmpdir': $TMPDIR}
|
||||||
|
" env option not work on neovim
|
||||||
|
if exists('*setenv')
|
||||||
let original = {
|
let original = {
|
||||||
\ 'NODE_NO_WARNINGS': getenv('NODE_NO_WARNINGS'),
|
\ 'NODE_NO_WARNINGS': getenv('NODE_NO_WARNINGS'),
|
||||||
\ 'COC_CHANNEL_TIMEOUT': getenv('COC_CHANNEL_TIMEOUT'),
|
\ 'COC_CHANNEL_TIMEOUT': getenv('COC_CHANNEL_TIMEOUT'),
|
||||||
\ 'COC_NO_WARNINGS': getenv('COC_NO_WARNINGS'),
|
\ 'COC_NO_WARNINGS': getenv('COC_NO_WARNINGS'),
|
||||||
\ 'TMPDIR': getenv('TMPDIR'),
|
\ 'TMPDIR': getenv('TMPDIR'),
|
||||||
\ }
|
\ }
|
||||||
" env option not work on neovim
|
|
||||||
call setenv('NODE_NO_WARNINGS', '1')
|
call setenv('NODE_NO_WARNINGS', '1')
|
||||||
call setenv('COC_CHANNEL_TIMEOUT', timeout)
|
call setenv('COC_CHANNEL_TIMEOUT', timeout)
|
||||||
call setenv('COC_NO_WARNINGS', disable_warning)
|
call setenv('COC_NO_WARNINGS', disable_warning)
|
||||||
call setenv('TMPDIR', tmpdir)
|
call setenv('TMPDIR', tmpdir)
|
||||||
|
else
|
||||||
|
let $NODE_NO_WARNINGS = 1
|
||||||
|
let $COC_NO_WARNINGS = disable_warning
|
||||||
|
let $TMPDIR = tmpdir
|
||||||
|
endif
|
||||||
let chan_id = jobstart(self.command, {
|
let chan_id = jobstart(self.command, {
|
||||||
\ 'rpc': 1,
|
\ 'rpc': 1,
|
||||||
\ 'on_stderr': {channel, msgs -> s:on_stderr(self.name, msgs)},
|
\ 'on_stderr': {channel, msgs -> s:on_stderr(self.name, msgs)},
|
||||||
\ 'on_exit': {channel, code -> s:on_exit(self.name, code)},
|
\ 'on_exit': {channel, code -> s:on_exit(self.name, code)},
|
||||||
\})
|
\})
|
||||||
|
if exists('*setenv')
|
||||||
for key in keys(original)
|
for key in keys(original)
|
||||||
call setenv(key, original[key])
|
call setenv(key, original[key])
|
||||||
endfor
|
endfor
|
||||||
|
else
|
||||||
|
let $TMPDIR = original['tmpdir']
|
||||||
|
endif
|
||||||
if chan_id <= 0
|
if chan_id <= 0
|
||||||
echohl Error | echom 'Failed to start '.self.name.' service' | echohl None
|
echohl Error | echom 'Failed to start '.self.name.' service' | echohl None
|
||||||
return
|
return
|
||||||
|
@ -120,6 +131,10 @@ function! s:on_exit(name, code) abort
|
||||||
let client['channel'] = v:null
|
let client['channel'] = v:null
|
||||||
let client['async_req_id'] = 1
|
let client['async_req_id'] = 1
|
||||||
if a:code != 0 && a:code != 143
|
if a:code != 0 && a:code != 143
|
||||||
|
" could be syntax error
|
||||||
|
if a:code == 1
|
||||||
|
call s:check_node()
|
||||||
|
endif
|
||||||
echohl Error | echom 'client '.a:name. ' abnormal exit with: '.a:code | echohl None
|
echohl Error | echom 'client '.a:name. ' abnormal exit with: '.a:code | echohl None
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -311,3 +326,14 @@ function! coc#client#open_log()
|
||||||
endif
|
endif
|
||||||
execute 'vs '.s:logfile
|
execute 'vs '.s:logfile
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:check_node() abort
|
||||||
|
let node = get(g:, 'coc_node_path', $COC_NODE_PATH == '' ? 'node' : $COC_NODE_PATH)
|
||||||
|
let output = trim(system(node . ' --version'))
|
||||||
|
let ms = matchlist(output, 'v\(\d\+\).\(\d\+\).\(\d\+\)')
|
||||||
|
if empty(ms) || str2nr(ms[1]) < 10 || (str2nr(ms[1]) == 10 && str2nr(ms[2]) < 12)
|
||||||
|
echohl Error
|
||||||
|
echon '[coc.nvim] Node version '.output.' < 10.12.0, please upgrade node.js or use g:coc_node_path variable.'
|
||||||
|
echohl None
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
191
pack/acp/opt/coc.nvim/autoload/coc/color.vim
Normal file
191
pack/acp/opt/coc.nvim/autoload/coc/color.vim
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
" Returns an approximate grey index for the given grey level
|
||||||
|
fun! s:grey_number(x)
|
||||||
|
if &t_Co == 88
|
||||||
|
if a:x < 23
|
||||||
|
return 0
|
||||||
|
elseif a:x < 69
|
||||||
|
return 1
|
||||||
|
elseif a:x < 103
|
||||||
|
return 2
|
||||||
|
elseif a:x < 127
|
||||||
|
return 3
|
||||||
|
elseif a:x < 150
|
||||||
|
return 4
|
||||||
|
elseif a:x < 173
|
||||||
|
return 5
|
||||||
|
elseif a:x < 196
|
||||||
|
return 6
|
||||||
|
elseif a:x < 219
|
||||||
|
return 7
|
||||||
|
elseif a:x < 243
|
||||||
|
return 8
|
||||||
|
else
|
||||||
|
return 9
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if a:x < 14
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
let l:n = (a:x - 8) / 10
|
||||||
|
let l:m = (a:x - 8) % 10
|
||||||
|
if l:m < 5
|
||||||
|
return l:n
|
||||||
|
else
|
||||||
|
return l:n + 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the actual grey level represented by the grey index
|
||||||
|
fun! s:grey_level(n)
|
||||||
|
if &t_Co == 88
|
||||||
|
if a:n == 0
|
||||||
|
return 0
|
||||||
|
elseif a:n == 1
|
||||||
|
return 46
|
||||||
|
elseif a:n == 2
|
||||||
|
return 92
|
||||||
|
elseif a:n == 3
|
||||||
|
return 115
|
||||||
|
elseif a:n == 4
|
||||||
|
return 139
|
||||||
|
elseif a:n == 5
|
||||||
|
return 162
|
||||||
|
elseif a:n == 6
|
||||||
|
return 185
|
||||||
|
elseif a:n == 7
|
||||||
|
return 208
|
||||||
|
elseif a:n == 8
|
||||||
|
return 231
|
||||||
|
else
|
||||||
|
return 255
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if a:n == 0
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 8 + (a:n * 10)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index for the given grey index
|
||||||
|
fun! s:grey_colour(n)
|
||||||
|
if &t_Co == 88
|
||||||
|
if a:n == 0
|
||||||
|
return 16
|
||||||
|
elseif a:n == 9
|
||||||
|
return 79
|
||||||
|
else
|
||||||
|
return 79 + a:n
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if a:n == 0
|
||||||
|
return 16
|
||||||
|
elseif a:n == 25
|
||||||
|
return 231
|
||||||
|
else
|
||||||
|
return 231 + a:n
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns an approximate colour index for the given colour level
|
||||||
|
fun! s:rgb_number(x)
|
||||||
|
if &t_Co == 88
|
||||||
|
if a:x < 69
|
||||||
|
return 0
|
||||||
|
elseif a:x < 172
|
||||||
|
return 1
|
||||||
|
elseif a:x < 230
|
||||||
|
return 2
|
||||||
|
else
|
||||||
|
return 3
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if a:x < 75
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
let l:n = (a:x - 55) / 40
|
||||||
|
let l:m = (a:x - 55) % 40
|
||||||
|
if l:m < 20
|
||||||
|
return l:n
|
||||||
|
else
|
||||||
|
return l:n + 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index for the given R/G/B colour indices
|
||||||
|
fun! s:rgb_colour(x, y, z)
|
||||||
|
if &t_Co == 88
|
||||||
|
return 16 + (a:x * 16) + (a:y * 4) + a:z
|
||||||
|
else
|
||||||
|
return 16 + (a:x * 36) + (a:y * 6) + a:z
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the actual colour level for the given colour index
|
||||||
|
fun! s:rgb_level(n)
|
||||||
|
if &t_Co == 88
|
||||||
|
if a:n == 0
|
||||||
|
return 0
|
||||||
|
elseif a:n == 1
|
||||||
|
return 139
|
||||||
|
elseif a:n == 2
|
||||||
|
return 205
|
||||||
|
else
|
||||||
|
return 255
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if a:n == 0
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 55 + (a:n * 40)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index to approximate the given R/G/B colour levels
|
||||||
|
fun! s:colour(r, g, b)
|
||||||
|
" Get the closest grey
|
||||||
|
let l:gx = s:grey_number(a:r)
|
||||||
|
let l:gy = s:grey_number(a:g)
|
||||||
|
let l:gz = s:grey_number(a:b)
|
||||||
|
|
||||||
|
" Get the closest colour
|
||||||
|
let l:x = s:rgb_number(a:r)
|
||||||
|
let l:y = s:rgb_number(a:g)
|
||||||
|
let l:z = s:rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" There are two possibilities
|
||||||
|
let l:dgr = s:grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = s:grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = s:grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = s:rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = s:rgb_level(l:gy) - a:g
|
||||||
|
let l:db = s:rgb_level(l:gz) - a:b
|
||||||
|
let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
|
||||||
|
if l:dgrey < l:drgb
|
||||||
|
" Use the grey
|
||||||
|
return s:grey_colour(l:gx)
|
||||||
|
else
|
||||||
|
" Use the colour
|
||||||
|
return s:rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Only one possibility
|
||||||
|
return s:rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
function! coc#color#rgb2term(rgb)
|
||||||
|
let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
|
||||||
|
let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
|
||||||
|
let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
|
||||||
|
return s:colour(l:r, l:g, l:b)
|
||||||
|
endfun
|
133
pack/acp/opt/coc.nvim/autoload/coc/compat.vim
Normal file
133
pack/acp/opt/coc.nvim/autoload/coc/compat.vim
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
let s:is_vim = !has('nvim')
|
||||||
|
|
||||||
|
" first window id for bufnr
|
||||||
|
" builtin bufwinid returns window of current tab only
|
||||||
|
function! coc#compat#buf_win_id(bufnr) abort
|
||||||
|
let info = filter(getwininfo(), 'v:val["bufnr"] =='.a:bufnr)
|
||||||
|
if empty(info)
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
return info[0]['winid']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#compat#win_is_valid(winid) abort
|
||||||
|
if exists('*nvim_win_is_valid')
|
||||||
|
return nvim_win_is_valid(a:winid)
|
||||||
|
endif
|
||||||
|
return !empty(getwininfo(a:winid))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" clear matches by window id, not throw on none exists window.
|
||||||
|
" may not work on vim < 8.1.1084 & neovim < 0.4.0
|
||||||
|
function! coc#compat#clear_matches(winid) abort
|
||||||
|
if !coc#compat#win_is_valid(a:winid)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let curr = win_getid()
|
||||||
|
if curr == a:winid
|
||||||
|
call clearmatches()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:is_vim
|
||||||
|
if has('patch-8.1.1084')
|
||||||
|
call clearmatches(a:winid)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if exists('*nvim_set_current_win')
|
||||||
|
noa call nvim_set_current_win(a:winid)
|
||||||
|
call clearmatches()
|
||||||
|
noa call nvim_set_current_win(curr)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#compat#matchaddpos(group, pos, priority, winid) abort
|
||||||
|
let curr = win_getid()
|
||||||
|
if curr == a:winid
|
||||||
|
call matchaddpos(a:group, a:pos, a:priority, -1)
|
||||||
|
else
|
||||||
|
if s:is_vim
|
||||||
|
if has('patch-8.1.0218')
|
||||||
|
call matchaddpos(a:group, a:pos, a:priority, -1, {'window': a:winid})
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if has('nvim-0.4.0')
|
||||||
|
call matchaddpos(a:group, a:pos, a:priority, -1, {'window': a:winid})
|
||||||
|
elseif exists('*nvim_set_current_win')
|
||||||
|
noa call nvim_set_current_win(a:winid)
|
||||||
|
call matchaddpos(a:group, a:pos, a:priority, -1)
|
||||||
|
noa call nvim_set_current_win(curr)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" hlGroup, pos, priority
|
||||||
|
function! coc#compat#matchaddgroups(winid, groups) abort
|
||||||
|
" add by winid
|
||||||
|
if s:is_vim && has('patch-8.1.0218') || has('nvim-0.4.0')
|
||||||
|
for group in a:groups
|
||||||
|
call matchaddpos(group['hlGroup'], [group['pos']], group['priority'], -1, {'window': a:winid})
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
let curr = win_getid()
|
||||||
|
if curr == a:winid
|
||||||
|
for group in a:groups
|
||||||
|
call matchaddpos(group['hlGroup'], [group['pos']], group['priority'], -1)
|
||||||
|
endfor
|
||||||
|
elseif exists('*nvim_set_current_win')
|
||||||
|
noa call nvim_set_current_win(a:winid)
|
||||||
|
for group in a:groups
|
||||||
|
call matchaddpos(group['hlGroup'], [group['pos']], group['priority'], -1)
|
||||||
|
endfor
|
||||||
|
noa call nvim_set_current_win(curr)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" remove keymap for specfic buffer
|
||||||
|
function! coc#compat#buf_del_keymap(bufnr, mode, lhs) abort
|
||||||
|
if !bufloaded(a:bufnr)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if exists('*nvim_buf_del_keymap')
|
||||||
|
try
|
||||||
|
call nvim_buf_del_keymap(a:bufnr, a:mode, a:lhs)
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E5555/
|
||||||
|
" ignore keymap not exists.
|
||||||
|
endtry
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if bufnr == a:bufnr
|
||||||
|
execute 'silent! '.a:mode.'unmap <buffer> '.a:lhs
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if exists('*win_execute')
|
||||||
|
let winid = coc#compat#buf_win_id(a:bufnr)
|
||||||
|
if winid != -1
|
||||||
|
call win_execute(winid, 'silent! '.a:mode.'unmap <buffer> '.a:lhs)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" execute command or list of commands in window
|
||||||
|
function! coc#compat#execute(winid, command) abort
|
||||||
|
if s:is_vim
|
||||||
|
if !exists('*win_execute')
|
||||||
|
throw 'win_execute function not exists, please upgrade your vim.'
|
||||||
|
endif
|
||||||
|
if type(a:command) == v:t_string
|
||||||
|
keepalt call win_execute(a:winid, a:command)
|
||||||
|
elseif type(a:command) == v:t_list
|
||||||
|
keepalt call win_execute(a:winid, join(a:command, "\n"))
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let curr = nvim_get_current_win()
|
||||||
|
noa keepalt call nvim_set_current_win(a:winid)
|
||||||
|
if type(a:command) == v:t_string
|
||||||
|
exec a:command
|
||||||
|
elseif type(a:command) == v:t_list
|
||||||
|
exec join(a:command, "\n")
|
||||||
|
endif
|
||||||
|
noa keepalt call nvim_set_current_win(curr)
|
||||||
|
endif
|
||||||
|
endfunc
|
File diff suppressed because it is too large
Load diff
|
@ -54,3 +54,36 @@ function! coc#helper#dict_omit(dict, keys) abort
|
||||||
endfor
|
endfor
|
||||||
return res
|
return res
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Return new dict with keys only
|
||||||
|
function! coc#helper#dict_pick(dict, keys) abort
|
||||||
|
let res = {}
|
||||||
|
for key in keys(a:dict)
|
||||||
|
if index(a:keys, key) != -1
|
||||||
|
let res[key] = a:dict[key]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return res
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" support for float values
|
||||||
|
function! coc#helper#min(first, ...) abort
|
||||||
|
let val = a:first
|
||||||
|
for i in range(0, len(a:000) - 1)
|
||||||
|
if a:000[i] < val
|
||||||
|
let val = a:000[i]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return val
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" support for float values
|
||||||
|
function! coc#helper#max(first, ...) abort
|
||||||
|
let val = a:first
|
||||||
|
for i in range(0, len(a:000) - 1)
|
||||||
|
if a:000[i] > val
|
||||||
|
let val = a:000[i]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return val
|
||||||
|
endfunction
|
||||||
|
|
321
pack/acp/opt/coc.nvim/autoload/coc/highlight.vim
Normal file
321
pack/acp/opt/coc.nvim/autoload/coc/highlight.vim
Normal file
|
@ -0,0 +1,321 @@
|
||||||
|
let s:is_vim = !has('nvim')
|
||||||
|
let s:clear_match_by_window = has('nvim-0.5.0') || has('patch-8.1.1084')
|
||||||
|
let s:namespace_map = {}
|
||||||
|
let s:ns_id = 1
|
||||||
|
|
||||||
|
if has('nvim-0.5.0')
|
||||||
|
try
|
||||||
|
call getmatches(0)
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E118/
|
||||||
|
let s:clear_match_by_window = 0
|
||||||
|
endtry
|
||||||
|
endif
|
||||||
|
|
||||||
|
" highlight LSP range,
|
||||||
|
function! coc#highlight#ranges(bufnr, key, hlGroup, ranges) abort
|
||||||
|
let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr
|
||||||
|
if !bufloaded(bufnr) || !exists('*getbufline')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let srcId = s:create_namespace(a:key)
|
||||||
|
for range in a:ranges
|
||||||
|
let start = range['start']
|
||||||
|
let end = range['end']
|
||||||
|
for lnum in range(start['line'] + 1, end['line'] + 1)
|
||||||
|
let arr = getbufline(bufnr, lnum)
|
||||||
|
let line = empty(arr) ? '' : arr[0]
|
||||||
|
if empty(line)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
" TODO don't know how to count UTF16 code point, should work most cases.
|
||||||
|
let colStart = lnum == start['line'] + 1 ? strlen(strcharpart(line, 0, start['character'])) : 0
|
||||||
|
let colEnd = lnum == end['line'] + 1 ? strlen(strcharpart(line, 0, end['character'])) : -1
|
||||||
|
if colStart == colEnd
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
call coc#highlight#add_highlight(bufnr, srcId, a:hlGroup, lnum - 1, colStart, colEnd)
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#highlight#add_highlight(bufnr, src_id, hl_group, line, col_start, col_end) abort
|
||||||
|
if has('nvim')
|
||||||
|
call nvim_buf_add_highlight(a:bufnr, a:src_id, a:hl_group, a:line, a:col_start, a:col_end)
|
||||||
|
else
|
||||||
|
call coc#api#call('buf_add_highlight', [a:bufnr, a:src_id, a:hl_group, a:line, a:col_start, a:col_end])
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#highlight#clear_highlight(bufnr, key, start_line, end_line) abort
|
||||||
|
let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr
|
||||||
|
if !bufloaded(bufnr)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let src_id = s:create_namespace(a:key)
|
||||||
|
if has('nvim')
|
||||||
|
call nvim_buf_clear_namespace(a:bufnr, src_id, a:start_line, a:end_line)
|
||||||
|
else
|
||||||
|
call coc#api#call('buf_clear_namespace', [a:bufnr, src_id, a:start_line, a:end_line])
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" highlight buffer in winid with CodeBlock &HighlightItems
|
||||||
|
" export interface HighlightItem {
|
||||||
|
" lnum: number // 0 based
|
||||||
|
" hlGroup: string
|
||||||
|
" colStart: number // 0 based
|
||||||
|
" colEnd: number
|
||||||
|
" }
|
||||||
|
" export interface CodeBlock {
|
||||||
|
" filetype?: string
|
||||||
|
" hlGroup?: string
|
||||||
|
" startLine: number // 0 based
|
||||||
|
" endLine: number
|
||||||
|
" }
|
||||||
|
function! coc#highlight#add_highlights(winid, codes, highlights) abort
|
||||||
|
" clear highlights
|
||||||
|
call coc#compat#execute(a:winid, 'syntax clear')
|
||||||
|
let bufnr = winbufnr(a:winid)
|
||||||
|
call coc#highlight#clear_highlight(bufnr, -1, 0, -1)
|
||||||
|
if !empty(a:codes)
|
||||||
|
call coc#highlight#highlight_lines(a:winid, a:codes)
|
||||||
|
endif
|
||||||
|
if !empty(a:highlights)
|
||||||
|
for item in a:highlights
|
||||||
|
call coc#highlight#add_highlight(bufnr, -1, item['hlGroup'], item['lnum'], item['colStart'], item['colEnd'])
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" Add highlights to line groups of winid, support hlGroup and filetype
|
||||||
|
" config should have startLine, endLine (1 based, end excluded) and filetype or hlGroup
|
||||||
|
" endLine should > startLine and endLine is excluded
|
||||||
|
"
|
||||||
|
" export interface CodeBlock {
|
||||||
|
" filetype?: string
|
||||||
|
" hlGroup?: string
|
||||||
|
" startLine: number // 0 based
|
||||||
|
" endLine: number
|
||||||
|
" }
|
||||||
|
function! coc#highlight#highlight_lines(winid, blocks) abort
|
||||||
|
let currwin = win_getid()
|
||||||
|
let switch = has('nvim') && currwin != a:winid
|
||||||
|
if switch
|
||||||
|
noa call nvim_set_current_win(a:winid)
|
||||||
|
endif
|
||||||
|
let defined = []
|
||||||
|
let region_id = 1
|
||||||
|
for config in a:blocks
|
||||||
|
let start = config['startLine'] + 1
|
||||||
|
let end = config['endLine'] == -1 ? len(getbufline(winbufnr(a:winid), 1, '$')) + 1 : config['endLine'] + 1
|
||||||
|
let filetype = get(config, 'filetype', '')
|
||||||
|
let hlGroup = get(config, 'hlGroup', '')
|
||||||
|
if !empty(hlGroup)
|
||||||
|
call s:execute(a:winid, 'syntax region '.hlGroup.' start=/\%'.start.'l/ end=/\%'.end.'l/')
|
||||||
|
else
|
||||||
|
let filetype = matchstr(filetype, '\v^\w+')
|
||||||
|
if empty(filetype) || filetype == 'txt' || index(get(g:, 'coc_markdown_disabled_languages', []), filetype) != -1
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
if index(defined, filetype) == -1
|
||||||
|
call s:execute(a:winid, 'syntax include @'.toupper(filetype).' syntax/'.filetype.'.vim')
|
||||||
|
if has('nvim')
|
||||||
|
unlet! b:current_syntax
|
||||||
|
elseif exists('*win_execute')
|
||||||
|
call win_execute(a:winid, 'unlet! b:current_syntax')
|
||||||
|
endif
|
||||||
|
call add(defined, filetype)
|
||||||
|
endif
|
||||||
|
call s:execute(a:winid, 'syntax region CodeBlock'.region_id.' start=/\%'.start.'l/ end=/\%'.end.'l/ contains=@'.toupper(filetype))
|
||||||
|
let region_id = region_id + 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if switch
|
||||||
|
noa call nvim_set_current_win(currwin)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Copmpose hlGroups with foreground and background colors.
|
||||||
|
function! coc#highlight#compose_hlgroup(fgGroup, bgGroup) abort
|
||||||
|
let hlGroup = 'Fg'.a:fgGroup.'Bg'.a:bgGroup
|
||||||
|
if a:fgGroup == a:bgGroup
|
||||||
|
return a:fgGroup
|
||||||
|
endif
|
||||||
|
if hlexists(hlGroup)
|
||||||
|
return hlGroup
|
||||||
|
endif
|
||||||
|
let fg = synIDattr(synIDtrans(hlID(a:fgGroup)), 'fg', 'gui')
|
||||||
|
let bg = synIDattr(synIDtrans(hlID(a:bgGroup)), 'bg', 'gui')
|
||||||
|
if fg =~# '^#' || bg =~# '^#'
|
||||||
|
call s:create_gui_hlgroup(hlGroup, fg, bg, '')
|
||||||
|
else
|
||||||
|
let fg = synIDattr(synIDtrans(hlID(a:fgGroup)), 'fg', 'cterm')
|
||||||
|
let bg = synIDattr(synIDtrans(hlID(a:bgGroup)), 'bg', 'cterm')
|
||||||
|
call s:create_cterm_hlgroup(hlGroup, fg, bg, '')
|
||||||
|
endif
|
||||||
|
return hlGroup
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" add matches for winid, use 0 for current window.
|
||||||
|
function! coc#highlight#match_ranges(winid, bufnr, ranges, hlGroup, priority) abort
|
||||||
|
let winid = a:winid == 0 ? win_getid() : a:winid
|
||||||
|
let bufnr = a:bufnr == 0 ? winbufnr(winid) : a:bufnr
|
||||||
|
if empty(getwininfo(winid)) || (a:bufnr != 0 && winbufnr(a:winid) != a:bufnr)
|
||||||
|
" not valid
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
if !s:clear_match_by_window
|
||||||
|
let curr = win_getid()
|
||||||
|
if has('nvim')
|
||||||
|
noa call nvim_set_current_win(winid)
|
||||||
|
else
|
||||||
|
noa call win_gotoid(winid)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let ids = []
|
||||||
|
for range in a:ranges
|
||||||
|
let list = []
|
||||||
|
let start = range['start']
|
||||||
|
let end = range['end']
|
||||||
|
for lnum in range(start['line'] + 1, end['line'] + 1)
|
||||||
|
let arr = getbufline(bufnr, lnum)
|
||||||
|
let line = empty(arr) ? '' : arr[0]
|
||||||
|
if empty(line)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let colStart = lnum == start['line'] + 1 ? strlen(strcharpart(line, 0, start['character'])) + 1 : 1
|
||||||
|
let colEnd = lnum == end['line'] + 1 ? strlen(strcharpart(line, 0, end['character'])) + 1 : strlen(line) + 1
|
||||||
|
if colStart == colEnd
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
call add(list, [lnum, colStart, colEnd - colStart])
|
||||||
|
endfor
|
||||||
|
if !empty(list)
|
||||||
|
let opts = s:clear_match_by_window ? {'window': a:winid} : {}
|
||||||
|
let id = matchaddpos(a:hlGroup, list, a:priority, -1, opts)
|
||||||
|
call add(ids, id)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if !s:clear_match_by_window
|
||||||
|
if has('nvim')
|
||||||
|
noa call nvim_set_current_win(curr)
|
||||||
|
else
|
||||||
|
noa call win_gotoid(curr)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return ids
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Clear matches by hlGroup regexp.
|
||||||
|
function! coc#highlight#clear_match_group(winid, match) abort
|
||||||
|
let winid = a:winid == 0 ? win_getid() : a:winid
|
||||||
|
if empty(getwininfo(winid))
|
||||||
|
" not valid
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:clear_match_by_window
|
||||||
|
let arr = filter(getmatches(winid), 'v:val["group"] =~# "'.a:match.'"')
|
||||||
|
for item in arr
|
||||||
|
call matchdelete(item['id'], winid)
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
let curr = win_getid()
|
||||||
|
let switch = exists('*nvim_set_current_win') && curr != winid
|
||||||
|
if switch
|
||||||
|
noa call nvim_set_current_win(a:winid)
|
||||||
|
endif
|
||||||
|
if win_getid() == winid
|
||||||
|
let arr = filter(getmatches(), 'v:val["group"] =~# "'.a:match.'"')
|
||||||
|
for item in arr
|
||||||
|
call matchdelete(item['id'])
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
if switch
|
||||||
|
noa call nvim_set_current_win(curr)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Clear matches by match ids, use 0 for current win.
|
||||||
|
function! coc#highlight#clear_matches(winid, ids)
|
||||||
|
let winid = a:winid == 0 ? win_getid() : a:winid
|
||||||
|
if empty(getwininfo(winid))
|
||||||
|
" not valid
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:clear_match_by_window
|
||||||
|
for id in a:ids
|
||||||
|
try
|
||||||
|
call matchdelete(id, winid)
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E803/
|
||||||
|
" ignore
|
||||||
|
endtry
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
let curr = win_getid()
|
||||||
|
let switch = exists('*nvim_set_current_win') && curr != winid
|
||||||
|
if switch
|
||||||
|
noa call nvim_set_current_win(a:winid)
|
||||||
|
endif
|
||||||
|
if win_getid() == winid
|
||||||
|
for id in a:ids
|
||||||
|
try
|
||||||
|
call matchdelete(id)
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E803/
|
||||||
|
" ignore
|
||||||
|
endtry
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
if switch
|
||||||
|
noa call nvim_set_current_win(curr)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Sets the highlighting for the given group
|
||||||
|
function! s:create_gui_hlgroup(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "silent hi " . a:group . " guifg=" . a:fg . " ctermfg=" . coc#color#rgb2term(strpart(a:fg, 1))
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "silent hi " . a:group . " guibg=" . a:bg . " ctermbg=" . coc#color#rgb2term(strpart(a:bg, 1))
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "silent hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
function! s:create_cterm_hlgroup(group, fg, bg, attr) abort
|
||||||
|
if a:fg != ""
|
||||||
|
exec "silent hi " . a:group . " ctermfg=" . a:fg
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "silent hi " . a:group . " ctermbg=" . a:bg
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "silent hi " . a:group . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:execute(winid, cmd) abort
|
||||||
|
if has('nvim')
|
||||||
|
execute 'silent! ' a:cmd
|
||||||
|
else
|
||||||
|
call win_execute(a:winid, a:cmd, 'silent!')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:create_namespace(key) abort
|
||||||
|
if type(a:key) == 0
|
||||||
|
return a:key
|
||||||
|
endif
|
||||||
|
if has('nvim')
|
||||||
|
return nvim_create_namespace('coc-'.a:key)
|
||||||
|
endif
|
||||||
|
if !has_key(s:namespace_map, a:key)
|
||||||
|
let s:namespace_map[a:key] = s:ns_id
|
||||||
|
let s:ns_id = s:ns_id + 1
|
||||||
|
endif
|
||||||
|
return s:namespace_map[a:key]
|
||||||
|
endfunction
|
|
@ -1,178 +1,31 @@
|
||||||
let s:activated = 0
|
|
||||||
let s:is_vim = !has('nvim')
|
let s:is_vim = !has('nvim')
|
||||||
let s:saved_ve = &t_ve
|
let s:prefix = '[List Preview]'
|
||||||
let s:saved_cursor = &guicursor
|
" filetype detect could be slow.
|
||||||
let s:gui = has('gui_running') || has('nvim')
|
let s:filetype_map = {
|
||||||
|
\ 'vim': 'vim',
|
||||||
function! coc#list#get_chars()
|
\ 'ts': 'typescript',
|
||||||
return {
|
\ 'js': 'javascript',
|
||||||
\ '<plug>': "\<Plug>",
|
\ 'html': 'html',
|
||||||
\ '<esc>': "\<Esc>",
|
\ 'css': 'css'
|
||||||
\ '<tab>': "\<Tab>",
|
\ }
|
||||||
\ '<s-tab>': "\<S-Tab>",
|
|
||||||
\ '<bs>': "\<bs>",
|
|
||||||
\ '<right>': "\<right>",
|
|
||||||
\ '<left>': "\<left>",
|
|
||||||
\ '<up>': "\<up>",
|
|
||||||
\ '<down>': "\<down>",
|
|
||||||
\ '<home>': "\<home>",
|
|
||||||
\ '<end>': "\<end>",
|
|
||||||
\ '<cr>': "\<cr>",
|
|
||||||
\ '<PageUp>' : "\<PageUp>",
|
|
||||||
\ '<PageDown>' : "\<PageDown>",
|
|
||||||
\ '<FocusGained>' : "\<FocusGained>",
|
|
||||||
\ '<ScrollWheelUp>': "\<ScrollWheelUp>",
|
|
||||||
\ '<ScrollWheelDown>': "\<ScrollWheelDown>",
|
|
||||||
\ '<LeftMouse>': "\<LeftMouse>",
|
|
||||||
\ '<LeftDrag>': "\<LeftDrag>",
|
|
||||||
\ '<LeftRelease>': "\<LeftRelease>",
|
|
||||||
\ '<2-LeftMouse>': "\<2-LeftMouse>",
|
|
||||||
\ '<C-a>': "\<C-a>",
|
|
||||||
\ '<C-b>': "\<C-b>",
|
|
||||||
\ '<C-c>': "\<C-c>",
|
|
||||||
\ '<C-d>': "\<C-d>",
|
|
||||||
\ '<C-e>': "\<C-e>",
|
|
||||||
\ '<C-f>': "\<C-f>",
|
|
||||||
\ '<C-g>': "\<C-g>",
|
|
||||||
\ '<C-h>': "\<C-h>",
|
|
||||||
\ '<C-i>': "\<C-i>",
|
|
||||||
\ '<C-j>': "\<C-j>",
|
|
||||||
\ '<C-k>': "\<C-k>",
|
|
||||||
\ '<C-l>': "\<C-l>",
|
|
||||||
\ '<C-m>': "\<C-m>",
|
|
||||||
\ '<C-n>': "\<C-n>",
|
|
||||||
\ '<C-o>': "\<C-o>",
|
|
||||||
\ '<C-p>': "\<C-p>",
|
|
||||||
\ '<C-q>': "\<C-q>",
|
|
||||||
\ '<C-r>': "\<C-r>",
|
|
||||||
\ '<C-s>': "\<C-s>",
|
|
||||||
\ '<C-t>': "\<C-t>",
|
|
||||||
\ '<C-u>': "\<C-u>",
|
|
||||||
\ '<C-v>': "\<C-v>",
|
|
||||||
\ '<C-w>': "\<C-w>",
|
|
||||||
\ '<C-x>': "\<C-x>",
|
|
||||||
\ '<C-y>': "\<C-y>",
|
|
||||||
\ '<C-z>': "\<C-z>",
|
|
||||||
\ '<A-a>': "\<A-a>",
|
|
||||||
\ '<A-b>': "\<A-b>",
|
|
||||||
\ '<A-c>': "\<A-c>",
|
|
||||||
\ '<A-d>': "\<A-d>",
|
|
||||||
\ '<A-e>': "\<A-e>",
|
|
||||||
\ '<A-f>': "\<A-f>",
|
|
||||||
\ '<A-g>': "\<A-g>",
|
|
||||||
\ '<A-h>': "\<A-h>",
|
|
||||||
\ '<A-i>': "\<A-i>",
|
|
||||||
\ '<A-j>': "\<A-j>",
|
|
||||||
\ '<A-k>': "\<A-k>",
|
|
||||||
\ '<A-l>': "\<A-l>",
|
|
||||||
\ '<A-m>': "\<A-m>",
|
|
||||||
\ '<A-n>': "\<A-n>",
|
|
||||||
\ '<A-o>': "\<A-o>",
|
|
||||||
\ '<A-p>': "\<A-p>",
|
|
||||||
\ '<A-q>': "\<A-q>",
|
|
||||||
\ '<A-r>': "\<A-r>",
|
|
||||||
\ '<A-s>': "\<A-s>",
|
|
||||||
\ '<A-t>': "\<A-t>",
|
|
||||||
\ '<A-u>': "\<A-u>",
|
|
||||||
\ '<A-v>': "\<A-v>",
|
|
||||||
\ '<A-w>': "\<A-w>",
|
|
||||||
\ '<A-x>': "\<A-x>",
|
|
||||||
\ '<A-y>': "\<A-y>",
|
|
||||||
\ '<A-z>': "\<A-z>",
|
|
||||||
\}
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#list#getc() abort
|
|
||||||
let c = getchar()
|
|
||||||
return type(c) == type(0) ? nr2char(c) : c
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#list#getchar() abort
|
function! coc#list#getchar() abort
|
||||||
let input = coc#list#getc()
|
return coc#prompt#getchar()
|
||||||
if 1 != &iminsert
|
|
||||||
return input
|
|
||||||
endif
|
|
||||||
"a language keymap is activated, so input must be resolved to the mapped values.
|
|
||||||
let partial_keymap = mapcheck(input, "l")
|
|
||||||
while partial_keymap !=# ""
|
|
||||||
let full_keymap = maparg(input, "l")
|
|
||||||
if full_keymap ==# "" && len(input) >= 3 "HACK: assume there are no keymaps longer than 3.
|
|
||||||
return input
|
|
||||||
elseif full_keymap ==# partial_keymap
|
|
||||||
return full_keymap
|
|
||||||
endif
|
|
||||||
let c = coc#list#getc()
|
|
||||||
if c ==# "\<Esc>" || c ==# "\<CR>"
|
|
||||||
"if the short sequence has a valid mapping, return that.
|
|
||||||
if !empty(full_keymap)
|
|
||||||
return full_keymap
|
|
||||||
endif
|
|
||||||
return input
|
|
||||||
endif
|
|
||||||
let input .= c
|
|
||||||
let partial_keymap = mapcheck(input, "l")
|
|
||||||
endwhile
|
|
||||||
return input
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#list#start_prompt(...) abort
|
function! coc#list#setlines(bufnr, lines, append)
|
||||||
let eventName = get(a:, 1, 'InputChar')
|
|
||||||
if s:is_vim
|
|
||||||
call s:start_prompt_vim(eventName)
|
|
||||||
else
|
|
||||||
call s:start_prompt(eventName)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:start_prompt_vim(eventName) abort
|
|
||||||
call timer_start(10, {-> s:start_prompt(a:eventName)})
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:start_prompt(eventName)
|
|
||||||
if s:activated | return | endif
|
|
||||||
if !get(g:, 'coc_disable_transparent_cursor', 0)
|
|
||||||
if s:gui
|
|
||||||
if has('nvim-0.5.0') && !empty(s:saved_cursor)
|
|
||||||
set guicursor+=a:ver1-CocCursorTransparent/lCursor
|
|
||||||
endif
|
|
||||||
elseif s:is_vim
|
|
||||||
set t_ve=
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let s:activated = 1
|
|
||||||
try
|
|
||||||
while s:activated
|
|
||||||
let ch = coc#list#getchar()
|
|
||||||
if ch ==# "\u26d4"
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
if ch ==# "\<FocusLost>" || ch ==# "\<FocusGained>" || ch ==# "\<CursorHold>"
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
call coc#rpc#notify(a:eventName, [ch, getcharmod()])
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
catch /^Vim:Interrupt$/
|
|
||||||
let s:activated = 0
|
|
||||||
call coc#rpc#notify(a:eventName, ["\<C-c>"])
|
|
||||||
return
|
|
||||||
endtry
|
|
||||||
let s:activated = 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#list#setlines(lines, append)
|
|
||||||
if a:append
|
if a:append
|
||||||
silent call append(line('$'), a:lines)
|
silent call appendbufline(a:bufnr, '$', a:lines)
|
||||||
else
|
else
|
||||||
silent call append(0, a:lines)
|
|
||||||
if exists('*deletebufline')
|
if exists('*deletebufline')
|
||||||
call deletebufline('%', len(a:lines) + 1, '$')
|
call deletebufline(a:bufnr, len(a:lines) + 1, '$')
|
||||||
else
|
else
|
||||||
let n = len(a:lines) + 1
|
let n = len(a:lines) + 1
|
||||||
let saved_reg = @"
|
let saved_reg = @"
|
||||||
silent execute n.',$d'
|
silent execute n.',$d'
|
||||||
let @" = saved_reg
|
let @" = saved_reg
|
||||||
endif
|
endif
|
||||||
|
silent call setbufline(a:bufnr, 1, a:lines)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -192,25 +45,6 @@ function! coc#list#names(...) abort
|
||||||
return join(names, "\n")
|
return join(names, "\n")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#list#stop_prompt(...)
|
|
||||||
if s:activated
|
|
||||||
let s:activated = 0
|
|
||||||
if get(a:, 1, 0) == 0 && !get(g:, 'coc_disable_transparent_cursor',0)
|
|
||||||
" neovim has bug with revert empty &guicursor
|
|
||||||
if s:gui && !empty(s:saved_cursor)
|
|
||||||
if has('nvim-0.5.0')
|
|
||||||
set guicursor+=a:ver1-Cursor/lCursor
|
|
||||||
let &guicursor = s:saved_cursor
|
|
||||||
endif
|
|
||||||
elseif s:is_vim
|
|
||||||
let &t_ve = s:saved_ve
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
echo ""
|
|
||||||
call feedkeys("\u26d4", 'int')
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#list#status(name)
|
function! coc#list#status(name)
|
||||||
if !exists('b:list_status') | return '' | endif
|
if !exists('b:list_status') | return '' | endif
|
||||||
return get(b:list_status, a:name, '')
|
return get(b:list_status, a:name, '')
|
||||||
|
@ -264,29 +98,245 @@ function! coc#list#setup(source)
|
||||||
nnoremap <silent><nowait><buffer> <esc> <C-w>c
|
nnoremap <silent><nowait><buffer> <esc> <C-w>c
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Check if previewwindow exists on current tab.
|
||||||
function! coc#list#has_preview()
|
function! coc#list#has_preview()
|
||||||
for i in range(1, winnr('$'))
|
for i in range(1, winnr('$'))
|
||||||
let preview = getwinvar(i, '&previewwindow')
|
let preview = getwinvar(i, 'previewwindow', getwinvar(i, '&previewwindow', 0))
|
||||||
if preview
|
if preview
|
||||||
return 1
|
return i
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#list#restore(winid, height)
|
" Get previewwindow from tabnr, use 0 for current tab
|
||||||
let res = win_gotoid(a:winid)
|
function! coc#list#get_preview(...) abort
|
||||||
if res == 0 | return | endif
|
let tabnr = get(a:, 1, 0) == 0 ? tabpagenr() : a:1
|
||||||
if winnr('$') == 1
|
let info = gettabinfo(tabnr)
|
||||||
|
if !empty(info)
|
||||||
|
for win in info[0]['windows']
|
||||||
|
if getwinvar(win, 'previewwindow', 0)
|
||||||
|
return win
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#list#scroll_preview(dir) abort
|
||||||
|
let winnr = coc#list#has_preview()
|
||||||
|
if !winnr
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
execute 'resize '.a:height
|
let winid = win_getid(winnr)
|
||||||
if s:is_vim
|
if exists('*win_execute')
|
||||||
|
call win_execute(winid, "normal! ".(a:dir ==# 'up' ? "\<C-u>" : "\<C-d>"))
|
||||||
|
else
|
||||||
|
let id = win_getid()
|
||||||
|
noa call win_gotoid(winid)
|
||||||
|
execute "normal! ".(a:dir ==# 'up' ? "\<C-u>" : "\<C-d>")
|
||||||
|
noa call win_gotoid(id)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#list#restore(winid, height)
|
||||||
|
if has('nvim')
|
||||||
|
if nvim_win_is_valid(a:winid)
|
||||||
|
call nvim_win_set_height(a:winid, a:height)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if exists('win_execute')
|
||||||
|
call win_execute(a:winid, 'noa resize '.a:height, 'silent!')
|
||||||
redraw
|
redraw
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#list#set_height(height) abort
|
function! coc#list#set_height(height) abort
|
||||||
if winnr('$') == 1| return | endif
|
if winnr('$') == 1| return | endif
|
||||||
execute 'resize '.a:height
|
execute 'resize '.a:height
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! coc#list#hide(original, height, winid) abort
|
||||||
|
let arr = win_id2tabwin(a:winid)
|
||||||
|
" close preview window
|
||||||
|
if !empty(arr) && arr[0] != 0
|
||||||
|
silent! pclose!
|
||||||
|
let previewwin = coc#list#get_preview(arr[0])
|
||||||
|
call s:close_win(previewwin)
|
||||||
|
endif
|
||||||
|
if !empty(getwininfo(a:original))
|
||||||
|
call win_gotoid(a:original)
|
||||||
|
endif
|
||||||
|
if a:winid
|
||||||
|
call s:close_win(a:winid)
|
||||||
|
endif
|
||||||
|
if !empty(a:height) && win_getid() == a:original
|
||||||
|
if exists('*nvim_win_set_height')
|
||||||
|
call nvim_win_set_height(a:original, a:height)
|
||||||
|
elseif win_getid() == a:original
|
||||||
|
execute 'resize '.a:height
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:close_win(winid) abort
|
||||||
|
if empty(a:winid) || a:winid == -1 || empty(getwininfo(a:winid))
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:is_vim
|
||||||
|
if exists('*win_execute')
|
||||||
|
noa call win_execute(a:winid, 'close!', 'silent!')
|
||||||
|
else
|
||||||
|
if win_getid() == a:winid
|
||||||
|
noa silent! close!
|
||||||
|
else
|
||||||
|
let winid = win_getid()
|
||||||
|
let res = win_gotoid(winid)
|
||||||
|
if res
|
||||||
|
noa silent! close!
|
||||||
|
noa wincmd p
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if nvim_win_is_valid(a:winid)
|
||||||
|
silent! noa call nvim_win_close(a:winid, 1)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Improve preview performance by reused window & buffer.
|
||||||
|
" lines - list of lines
|
||||||
|
" config.position - could be 'below' 'top' 'tab'.
|
||||||
|
" config.winid - id of original window.
|
||||||
|
" config.name - (optional )name of preview buffer.
|
||||||
|
" config.splitRight - (optional) split to right when 1.
|
||||||
|
" config.lnum - (optional) current line number
|
||||||
|
" config.filetype - (optional) filetype of lines.
|
||||||
|
" config.hlGroup - (optional) highlight group.
|
||||||
|
" config.maxHeight - (optional) max height of window, valid for 'below' & 'top' position.
|
||||||
|
function! coc#list#preview(lines, config) abort
|
||||||
|
if s:is_vim && !exists('*win_execute')
|
||||||
|
throw 'win_execute function required for preview, please upgrade your vim.'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let name = fnamemodify(get(a:config, 'name', ''), ':.')
|
||||||
|
let lines = a:lines
|
||||||
|
if empty(lines)
|
||||||
|
if get(a:config, 'scheme', 'file') != 'file'
|
||||||
|
let bufnr = s:load_buffer(name)
|
||||||
|
if bufnr != 0
|
||||||
|
let lines = getbufline(bufnr, 1, '$')
|
||||||
|
else
|
||||||
|
let lines = ['']
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Show empty lines so not close window.
|
||||||
|
let lines = ['']
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let winid = coc#list#get_preview(0)
|
||||||
|
let bufnr = winid == -1 ? 0 : winbufnr(winid)
|
||||||
|
" Try reuse buffer & window
|
||||||
|
let bufnr = coc#float#create_buf(bufnr, lines)
|
||||||
|
if bufnr == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
call setbufvar(bufnr, '&synmaxcol', 500)
|
||||||
|
let filetype = get(a:config, 'filetype', '')
|
||||||
|
let extname = matchstr(name, '\.\zs[^.]\+$')
|
||||||
|
if empty(filetype) && !empty(extname)
|
||||||
|
let filetype = get(s:filetype_map, extname, '')
|
||||||
|
endif
|
||||||
|
let range = get(a:config, 'range', v:null)
|
||||||
|
let hlGroup = get(a:config, 'hlGroup', 'Search')
|
||||||
|
let lnum = get(a:config, 'lnum', 1)
|
||||||
|
let position = get(a:config, 'position', 'below')
|
||||||
|
let original = get(a:config, 'winid', -1)
|
||||||
|
if winid == -1
|
||||||
|
let change = position != 'tab' && get(a:config, 'splitRight', 0)
|
||||||
|
let curr = win_getid()
|
||||||
|
if change
|
||||||
|
if original && win_id2win(original)
|
||||||
|
noa call win_gotoid(original)
|
||||||
|
else
|
||||||
|
noa wincmd t
|
||||||
|
endif
|
||||||
|
execute 'noa belowright vert sb '.bufnr
|
||||||
|
let winid = win_getid()
|
||||||
|
elseif position == 'tab' || get(a:config, 'splitRight', 0)
|
||||||
|
execute 'noa belowright vert sb '.bufnr
|
||||||
|
let winid = win_getid()
|
||||||
|
else
|
||||||
|
let mod = position == 'top' ? 'below' : 'above'
|
||||||
|
let height = s:get_height(lines, a:config)
|
||||||
|
execute 'noa '.mod.' sb +resize\ '.height.' '.bufnr
|
||||||
|
let winid = win_getid()
|
||||||
|
endif
|
||||||
|
noa call winrestview({"lnum": lnum ,"topline":max([1, lnum - 3])})
|
||||||
|
call setwinvar(winid, '&signcolumn', 'no')
|
||||||
|
call setwinvar(winid, '&number', 1)
|
||||||
|
call setwinvar(winid, '&cursorline', 0)
|
||||||
|
call setwinvar(winid, '&relativenumber', 0)
|
||||||
|
call setwinvar(winid, 'previewwindow', 1)
|
||||||
|
noa call win_gotoid(curr)
|
||||||
|
else
|
||||||
|
let height = s:get_height(lines, a:config)
|
||||||
|
if height > 0
|
||||||
|
if s:is_vim
|
||||||
|
let curr = win_getid()
|
||||||
|
noa call win_gotoid(winid)
|
||||||
|
execute 'silent! noa resize '.height
|
||||||
|
noa call win_gotoid(curr)
|
||||||
|
else
|
||||||
|
call nvim_win_set_height(winid, height)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call coc#compat#execute(winid, ['syntax clear', 'noa call winrestview({"lnum":'.lnum.',"topline":'.max([1, lnum - 3]).'})'])
|
||||||
|
endif
|
||||||
|
if s:prefix.' '.name != bufname(bufnr)
|
||||||
|
if s:is_vim
|
||||||
|
call win_execute(winid, 'noa file '.fnameescape(s:prefix.' '.name), 'silent!')
|
||||||
|
else
|
||||||
|
silent! noa call nvim_buf_set_name(bufnr, s:prefix.' '.name)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" highlights
|
||||||
|
if !empty(filetype)
|
||||||
|
let start = max([0, lnum - 300])
|
||||||
|
let end = min([len(lines), lnum + 300])
|
||||||
|
call coc#highlight#highlight_lines(winid, [{'filetype': filetype, 'startLine': start, 'endLine': end}])
|
||||||
|
call coc#compat#execute(winid, 'syn sync fromstart')
|
||||||
|
else
|
||||||
|
call coc#compat#execute(winid, 'filetype detect')
|
||||||
|
let ft = getbufvar(bufnr, '&filetype', '')
|
||||||
|
if !empty(extname) && !empty(ft)
|
||||||
|
let s:filetype_map[extname] = ft
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call sign_unplace('coc', {'buffer': bufnr})
|
||||||
|
call coc#compat#execute(winid, 'call clearmatches()')
|
||||||
|
if !empty(range)
|
||||||
|
call sign_place(1, 'coc', 'CocCurrentLine', bufnr, {'lnum': lnum})
|
||||||
|
call coc#highlight#match_ranges(winid, bufnr, [range], hlGroup, 10)
|
||||||
|
endif
|
||||||
|
redraw
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:get_height(lines, config) abort
|
||||||
|
if get(a:config, 'splitRight', 0) || get(a:config, 'position', 'below') == 'tab'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let height = min([get(a:config, 'maxHeight', 10), len(a:lines), &lines - &cmdheight - 2])
|
||||||
|
return height
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:load_buffer(name) abort
|
||||||
|
if exists('*bufadd') && exists('*bufload')
|
||||||
|
let bufnr = bufadd(a:name)
|
||||||
|
call bufload(bufnr)
|
||||||
|
return bufnr
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
|
208
pack/acp/opt/coc.nvim/autoload/coc/prompt.vim
Normal file
208
pack/acp/opt/coc.nvim/autoload/coc/prompt.vim
Normal file
|
@ -0,0 +1,208 @@
|
||||||
|
let s:is_vim = !has('nvim')
|
||||||
|
let s:activated = 0
|
||||||
|
let s:session_names = []
|
||||||
|
let s:saved_ve = &t_ve
|
||||||
|
let s:saved_cursor = &guicursor
|
||||||
|
let s:gui = has('gui_running') || has('nvim')
|
||||||
|
|
||||||
|
let s:char_map = {
|
||||||
|
\ "\<Plug>": '<plug>',
|
||||||
|
\ "\<Esc>": '<esc>',
|
||||||
|
\ "\<Tab>": '<tab>',
|
||||||
|
\ "\<S-Tab>": '<s-tab>',
|
||||||
|
\ "\<bs>": '<bs>',
|
||||||
|
\ "\<right>": '<right>',
|
||||||
|
\ "\<left>": '<left>',
|
||||||
|
\ "\<up>": '<up>',
|
||||||
|
\ "\<down>": '<down>',
|
||||||
|
\ "\<home>": '<home>',
|
||||||
|
\ "\<end>": '<end>',
|
||||||
|
\ "\<cr>": '<cr>',
|
||||||
|
\ "\<PageUp>":'<PageUp>' ,
|
||||||
|
\ "\<PageDown>":'<PageDown>' ,
|
||||||
|
\ "\<FocusGained>":'<FocusGained>' ,
|
||||||
|
\ "\<ScrollWheelUp>": '<ScrollWheelUp>',
|
||||||
|
\ "\<ScrollWheelDown>": '<ScrollWheelDown>',
|
||||||
|
\ "\<LeftMouse>": '<LeftMouse>',
|
||||||
|
\ "\<LeftDrag>": '<LeftDrag>',
|
||||||
|
\ "\<LeftRelease>": '<LeftRelease>',
|
||||||
|
\ "\<2-LeftMouse>": '<2-LeftMouse>',
|
||||||
|
\ "\<C-a>": '<C-a>',
|
||||||
|
\ "\<C-b>": '<C-b>',
|
||||||
|
\ "\<C-c>": '<C-c>',
|
||||||
|
\ "\<C-d>": '<C-d>',
|
||||||
|
\ "\<C-e>": '<C-e>',
|
||||||
|
\ "\<C-f>": '<C-f>',
|
||||||
|
\ "\<C-g>": '<C-g>',
|
||||||
|
\ "\<C-h>": '<C-h>',
|
||||||
|
\ "\<C-j>": '<C-j>',
|
||||||
|
\ "\<C-k>": '<C-k>',
|
||||||
|
\ "\<C-l>": '<C-l>',
|
||||||
|
\ "\<C-n>": '<C-n>',
|
||||||
|
\ "\<C-o>": '<C-o>',
|
||||||
|
\ "\<C-p>": '<C-p>',
|
||||||
|
\ "\<C-q>": '<C-q>',
|
||||||
|
\ "\<C-r>": '<C-r>',
|
||||||
|
\ "\<C-s>": '<C-s>',
|
||||||
|
\ "\<C-t>": '<C-t>',
|
||||||
|
\ "\<C-u>": '<C-u>',
|
||||||
|
\ "\<C-v>": '<C-v>',
|
||||||
|
\ "\<C-w>": '<C-w>',
|
||||||
|
\ "\<C-x>": '<C-x>',
|
||||||
|
\ "\<C-y>": '<C-y>',
|
||||||
|
\ "\<C-z>": '<C-z>',
|
||||||
|
\ "\<A-a>": '<A-a>',
|
||||||
|
\ "\<A-b>": '<A-b>',
|
||||||
|
\ "\<A-c>": '<A-c>',
|
||||||
|
\ "\<A-d>": '<A-d>',
|
||||||
|
\ "\<A-e>": '<A-e>',
|
||||||
|
\ "\<A-f>": '<A-f>',
|
||||||
|
\ "\<A-g>": '<A-g>',
|
||||||
|
\ "\<A-h>": '<A-h>',
|
||||||
|
\ "\<A-i>": '<A-i>',
|
||||||
|
\ "\<A-j>": '<A-j>',
|
||||||
|
\ "\<A-k>": '<A-k>',
|
||||||
|
\ "\<A-l>": '<A-l>',
|
||||||
|
\ "\<A-m>": '<A-m>',
|
||||||
|
\ "\<A-n>": '<A-n>',
|
||||||
|
\ "\<A-o>": '<A-o>',
|
||||||
|
\ "\<A-p>": '<A-p>',
|
||||||
|
\ "\<A-q>": '<A-q>',
|
||||||
|
\ "\<A-r>": '<A-r>',
|
||||||
|
\ "\<A-s>": '<A-s>',
|
||||||
|
\ "\<A-t>": '<A-t>',
|
||||||
|
\ "\<A-u>": '<A-u>',
|
||||||
|
\ "\<A-v>": '<A-v>',
|
||||||
|
\ "\<A-w>": '<A-w>',
|
||||||
|
\ "\<A-x>": '<A-x>',
|
||||||
|
\ "\<A-y>": '<A-y>',
|
||||||
|
\ "\<A-z>": '<A-z>',
|
||||||
|
\ }
|
||||||
|
|
||||||
|
function! coc#prompt#getc() abort
|
||||||
|
let c = getchar()
|
||||||
|
return type(c) == type(0) ? nr2char(c) : c
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#prompt#getchar() abort
|
||||||
|
let input = coc#prompt#getc()
|
||||||
|
if 1 != &iminsert
|
||||||
|
return input
|
||||||
|
endif
|
||||||
|
"a language keymap is activated, so input must be resolved to the mapped values.
|
||||||
|
let partial_keymap = mapcheck(input, "l")
|
||||||
|
while partial_keymap !=# ""
|
||||||
|
let full_keymap = maparg(input, "l")
|
||||||
|
if full_keymap ==# "" && len(input) >= 3 "HACK: assume there are no keymaps longer than 3.
|
||||||
|
return input
|
||||||
|
elseif full_keymap ==# partial_keymap
|
||||||
|
return full_keymap
|
||||||
|
endif
|
||||||
|
let c = coc#prompt#getc()
|
||||||
|
if c ==# "\<Esc>" || c ==# "\<CR>"
|
||||||
|
"if the short sequence has a valid mapping, return that.
|
||||||
|
if !empty(full_keymap)
|
||||||
|
return full_keymap
|
||||||
|
endif
|
||||||
|
return input
|
||||||
|
endif
|
||||||
|
let input .= c
|
||||||
|
let partial_keymap = mapcheck(input, "l")
|
||||||
|
endwhile
|
||||||
|
return input
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#prompt#start_prompt(session) abort
|
||||||
|
let s:session_names = s:filter(s:session_names, a:session)
|
||||||
|
call add(s:session_names, a:session)
|
||||||
|
if s:activated | return | endif
|
||||||
|
if s:is_vim
|
||||||
|
call s:start_prompt_vim()
|
||||||
|
else
|
||||||
|
call s:start_prompt()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:start_prompt_vim() abort
|
||||||
|
call timer_start(10, {-> s:start_prompt()})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:start_prompt()
|
||||||
|
if s:activated | return | endif
|
||||||
|
if !get(g:, 'coc_disable_transparent_cursor', 0)
|
||||||
|
if s:gui
|
||||||
|
if has('nvim-0.5.0') && !empty(s:saved_cursor)
|
||||||
|
set guicursor+=a:ver1-CocCursorTransparent/lCursor
|
||||||
|
endif
|
||||||
|
elseif s:is_vim
|
||||||
|
set t_ve=
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let s:activated = 1
|
||||||
|
try
|
||||||
|
while s:activated
|
||||||
|
let ch = coc#prompt#getchar()
|
||||||
|
if ch ==# "\<FocusLost>" || ch ==# "\<FocusGained>" || ch ==# "\<CursorHold>"
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
let curr = s:current_session()
|
||||||
|
let mapped = get(s:char_map, ch, ch)
|
||||||
|
if !empty(curr)
|
||||||
|
call coc#rpc#notify('InputChar', [curr, mapped, getcharmod()])
|
||||||
|
endif
|
||||||
|
if mapped == '<esc>'
|
||||||
|
let s:session_names = []
|
||||||
|
call s:reset()
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
catch /^Vim:Interrupt$/
|
||||||
|
let s:activated = 0
|
||||||
|
call coc#rpc#notify('InputChar', [s:current_session(), '<esc>'])
|
||||||
|
return
|
||||||
|
endtry
|
||||||
|
let s:activated = 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#prompt#stop_prompt(session)
|
||||||
|
let s:session_names = s:filter(s:session_names, a:session)
|
||||||
|
if len(s:session_names)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:activated
|
||||||
|
let s:activated = 0
|
||||||
|
call s:reset()
|
||||||
|
call feedkeys("\<esc>", 'int')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#prompt#activated() abort
|
||||||
|
return s:activated
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:reset() abort
|
||||||
|
if !get(g:, 'coc_disable_transparent_cursor',0)
|
||||||
|
" neovim has bug with revert empty &guicursor
|
||||||
|
if s:gui && !empty(s:saved_cursor)
|
||||||
|
if has('nvim-0.5.0')
|
||||||
|
set guicursor+=a:ver1-Cursor/lCursor
|
||||||
|
let &guicursor = s:saved_cursor
|
||||||
|
endif
|
||||||
|
elseif s:is_vim
|
||||||
|
let &t_ve = s:saved_ve
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
echo ""
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:current_session() abort
|
||||||
|
if empty(s:session_names)
|
||||||
|
return v:null
|
||||||
|
endif
|
||||||
|
return s:session_names[len(s:session_names) - 1]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:filter(list, id) abort
|
||||||
|
return filter(copy(a:list), 'v:val !=# a:id')
|
||||||
|
endfunction
|
|
@ -117,11 +117,11 @@ endfunction
|
||||||
|
|
||||||
" send async response to server
|
" send async response to server
|
||||||
function! coc#rpc#async_request(id, method, args)
|
function! coc#rpc#async_request(id, method, args)
|
||||||
let l:Cb = {err, res -> coc#rpc#notify('nvim_async_response_event', [a:id, err, res])}
|
let l:Cb = {err, ... -> coc#rpc#notify('nvim_async_response_event', [a:id, err, get(a:000, 0, v:null)])}
|
||||||
let args = a:args + [l:Cb]
|
let args = a:args + [l:Cb]
|
||||||
try
|
try
|
||||||
call call(a:method, args)
|
call call(a:method, args)
|
||||||
catch /.*/
|
catch /.*/
|
||||||
call coc#rpc#notify('nvim_async_response_event', [a:id, v:exception])
|
call coc#rpc#notify('nvim_async_response_event', [a:id, v:exception, v:null])
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -3,11 +3,14 @@
|
||||||
" Author: Qiming Zhao <chemzqm@gmail.com>
|
" Author: Qiming Zhao <chemzqm@gmail.com>
|
||||||
" Licence: MIT licence
|
" Licence: MIT licence
|
||||||
" Version: 0.1
|
" Version: 0.1
|
||||||
" Last Modified: April 08, 2019
|
" Last Modified: Dec 12, 2020
|
||||||
" ============================================================================
|
" ============================================================================
|
||||||
|
|
||||||
let s:is_vim = !has('nvim')
|
let s:is_vim = !has('nvim')
|
||||||
let s:running_task = {}
|
let s:running_task = {}
|
||||||
|
" neovim emit strings that part of lines.
|
||||||
|
let s:out_remain_text = {}
|
||||||
|
let s:err_remain_text = {}
|
||||||
|
|
||||||
function! coc#task#start(id, opts)
|
function! coc#task#start(id, opts)
|
||||||
if coc#task#running(a:id)
|
if coc#task#running(a:id)
|
||||||
|
@ -15,6 +18,7 @@ function! coc#task#start(id, opts)
|
||||||
endif
|
endif
|
||||||
let cmd = [a:opts['cmd']] + get(a:opts, 'args', [])
|
let cmd = [a:opts['cmd']] + get(a:opts, 'args', [])
|
||||||
let cwd = get(a:opts, 'cwd', getcwd())
|
let cwd = get(a:opts, 'cwd', getcwd())
|
||||||
|
let env = get(a:opts, 'env', {})
|
||||||
" cmd args cwd pty
|
" cmd args cwd pty
|
||||||
if s:is_vim
|
if s:is_vim
|
||||||
let options = {
|
let options = {
|
||||||
|
@ -24,6 +28,7 @@ function! coc#task#start(id, opts)
|
||||||
\ 'err_cb': {channel, message -> s:on_stderr(a:id, [message])},
|
\ 'err_cb': {channel, message -> s:on_stderr(a:id, [message])},
|
||||||
\ 'out_cb': {channel, message -> s:on_stdout(a:id, [message])},
|
\ 'out_cb': {channel, message -> s:on_stdout(a:id, [message])},
|
||||||
\ 'exit_cb': {channel, code -> s:on_exit(a:id, code)},
|
\ 'exit_cb': {channel, code -> s:on_exit(a:id, code)},
|
||||||
|
\ 'env': env,
|
||||||
\}
|
\}
|
||||||
if has("patch-8.1.350")
|
if has("patch-8.1.350")
|
||||||
let options['noblock'] = 1
|
let options['noblock'] = 1
|
||||||
|
@ -41,15 +46,27 @@ function! coc#task#start(id, opts)
|
||||||
else
|
else
|
||||||
let options = {
|
let options = {
|
||||||
\ 'cwd': cwd,
|
\ 'cwd': cwd,
|
||||||
\ 'on_stderr': {channel, msgs -> s:on_stderr(a:id, filter(msgs, 'v:val !=""'))},
|
\ 'on_stderr': {channel, msgs -> s:on_stderr(a:id, msgs)},
|
||||||
\ 'on_stdout': {channel, msgs -> s:on_stdout(a:id, filter(msgs, 'v:val !=""'))},
|
\ 'on_stdout': {channel, msgs -> s:on_stdout(a:id, msgs)},
|
||||||
\ 'on_exit': {channel, code -> s:on_exit(a:id, code)},
|
\ 'on_exit': {channel, code -> s:on_exit(a:id, code)},
|
||||||
\ 'detach': get(a:opts, 'detach', 0),
|
\ 'detach': get(a:opts, 'detach', 0),
|
||||||
\}
|
\}
|
||||||
|
let original = {}
|
||||||
|
if !empty(env) && exists('*setenv') && exists('*getenv')
|
||||||
|
for key in keys(env)
|
||||||
|
let original[key] = getenv(key)
|
||||||
|
call setenv(key, env[key])
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
if get(a:opts, 'pty', 0)
|
if get(a:opts, 'pty', 0)
|
||||||
let options['pty'] = 1
|
let options['pty'] = 1
|
||||||
endif
|
endif
|
||||||
let chan_id = jobstart(cmd, options)
|
let chan_id = jobstart(cmd, options)
|
||||||
|
if !empty(original)
|
||||||
|
for key in keys(original)
|
||||||
|
call setenv(key, original[key])
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
if chan_id <= 0
|
if chan_id <= 0
|
||||||
echohl Error | echom 'Failed to start '.a:id.' task' | echohl None
|
echohl Error | echom 'Failed to start '.a:id.' task' | echohl None
|
||||||
return v:false
|
return v:false
|
||||||
|
@ -76,6 +93,10 @@ endfunction
|
||||||
|
|
||||||
function! s:on_exit(id, code) abort
|
function! s:on_exit(id, code) abort
|
||||||
if get(g:, 'coc_vim_leaving', 0) | return | endif
|
if get(g:, 'coc_vim_leaving', 0) | return | endif
|
||||||
|
if has('nvim')
|
||||||
|
let s:out_remain_text[a:id] = ''
|
||||||
|
let s:err_remain_text[a:id] = ''
|
||||||
|
endif
|
||||||
if has_key(s:running_task, a:id)
|
if has_key(s:running_task, a:id)
|
||||||
call remove(s:running_task, a:id)
|
call remove(s:running_task, a:id)
|
||||||
endif
|
endif
|
||||||
|
@ -84,14 +105,58 @@ endfunction
|
||||||
|
|
||||||
function! s:on_stderr(id, msgs)
|
function! s:on_stderr(id, msgs)
|
||||||
if get(g:, 'coc_vim_leaving', 0) | return | endif
|
if get(g:, 'coc_vim_leaving', 0) | return | endif
|
||||||
if len(a:msgs)
|
if empty(a:msgs)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:is_vim
|
||||||
call coc#rpc#notify('TaskStderr', [a:id, a:msgs])
|
call coc#rpc#notify('TaskStderr', [a:id, a:msgs])
|
||||||
|
else
|
||||||
|
let remain = get(s:err_remain_text, a:id, '')
|
||||||
|
let eof = (a:msgs == [''])
|
||||||
|
let msgs = copy(a:msgs)
|
||||||
|
if len(remain) > 0
|
||||||
|
if msgs[0] == ''
|
||||||
|
let msgs[0] = remain
|
||||||
|
else
|
||||||
|
let msgs[0] = remain . msgs[0]
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let last = msgs[len(msgs) - 1]
|
||||||
|
let s:err_remain_text[a:id] = len(last) > 0 ? last : ''
|
||||||
|
" all lines from 0 to n - 2
|
||||||
|
if len(msgs) > 1
|
||||||
|
call coc#rpc#notify('TaskStderr', [a:id, msgs[:len(msgs)-2]])
|
||||||
|
elseif eof && len(msgs[0]) > 0
|
||||||
|
call coc#rpc#notify('TaskStderr', [a:id, msgs])
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:on_stdout(id, msgs)
|
function! s:on_stdout(id, msgs)
|
||||||
if len(a:msgs)
|
if empty(a:msgs)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if s:is_vim
|
||||||
call coc#rpc#notify('TaskStdout', [a:id, a:msgs])
|
call coc#rpc#notify('TaskStdout', [a:id, a:msgs])
|
||||||
|
else
|
||||||
|
let remain = get(s:out_remain_text, a:id, '')
|
||||||
|
let eof = (a:msgs == [''])
|
||||||
|
let msgs = copy(a:msgs)
|
||||||
|
if len(remain) > 0
|
||||||
|
if msgs[0] == ''
|
||||||
|
let msgs[0] = remain
|
||||||
|
else
|
||||||
|
let msgs[0] = remain . msgs[0]
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let last = msgs[len(msgs) - 1]
|
||||||
|
let s:out_remain_text[a:id] = len(last) > 0 ? last : ''
|
||||||
|
" all lines from 0 to n - 2
|
||||||
|
if len(msgs) > 1
|
||||||
|
call coc#rpc#notify('TaskStdout', [a:id, msgs[:len(msgs)-2]])
|
||||||
|
elseif eof && len(msgs[0]) > 0
|
||||||
|
call coc#rpc#notify('TaskStdout', [a:id, msgs])
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ function! coc#terminal#start(cmd, cwd, env) abort
|
||||||
" use env option when possible
|
" use env option when possible
|
||||||
if s:is_vim
|
if s:is_vim
|
||||||
let env = copy(a:env)
|
let env = copy(a:env)
|
||||||
else
|
elseif exists('*setenv')
|
||||||
for key in keys(a:env)
|
for key in keys(a:env)
|
||||||
let original[key] = getenv(key)
|
let original[key] = getenv(key)
|
||||||
call setenv(key, a:env[key])
|
call setenv(key, a:env[key])
|
||||||
|
@ -44,7 +44,7 @@ function! coc#terminal#start(cmd, cwd, env) abort
|
||||||
\ 'on_exit': {job, status -> s:OnExit(status)},
|
\ 'on_exit': {job, status -> s:OnExit(status)},
|
||||||
\ 'env': env,
|
\ 'env': env,
|
||||||
\ })
|
\ })
|
||||||
if !empty(original)
|
if !empty(original) && exists('*setenv')
|
||||||
for key in keys(original)
|
for key in keys(original)
|
||||||
call setenv(key, original[key])
|
call setenv(key, original[key])
|
||||||
endfor
|
endfor
|
||||||
|
|
|
@ -2,6 +2,7 @@ let s:root = expand('<sfile>:h:h:h')
|
||||||
let s:is_win = has('win32') || has('win64')
|
let s:is_win = has('win32') || has('win64')
|
||||||
let s:is_vim = !has('nvim')
|
let s:is_vim = !has('nvim')
|
||||||
let s:clear_match_by_id = has('nvim-0.5.0') || has('patch-8.1.1084')
|
let s:clear_match_by_id = has('nvim-0.5.0') || has('patch-8.1.1084')
|
||||||
|
let s:vim_api_version = 8
|
||||||
|
|
||||||
let s:activate = ""
|
let s:activate = ""
|
||||||
let s:quit = ""
|
let s:quit = ""
|
||||||
|
@ -26,95 +27,13 @@ function! coc#util#has_preview()
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#scroll_preview(dir) abort
|
function! coc#util#api_version() abort
|
||||||
let winnr = coc#util#has_preview()
|
return s:vim_api_version
|
||||||
if !winnr
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
let winid = win_getid(winnr)
|
|
||||||
if exists('*win_execute')
|
|
||||||
call win_execute(winid, "normal! ".(a:dir ==# 'up' ? "\<C-u>" : "\<C-d>"))
|
|
||||||
else
|
|
||||||
let id = win_getid()
|
|
||||||
noa call win_gotoid(winid)
|
|
||||||
execute "normal! ".(a:dir ==# 'up' ? "\<C-u>" : "\<C-d>")
|
|
||||||
noa call win_gotoid(id)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#has_float()
|
|
||||||
echohl Error | echon 'coc#util#has_float is deprecated, use coc#float#has_float instead' | echohl None
|
|
||||||
return coc#float#has_float()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#float_hide()
|
|
||||||
echohl Error | echon 'coc#util#float_hide is deprecated, use coc#float#close_all instead' | echohl None
|
|
||||||
call coc#float#close_all()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#float_jump()
|
|
||||||
echohl Error | echon 'coc#util#float_jump is deprecated, use coc#float#jump instead' | echohl None
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" close all float/popup window
|
|
||||||
function! coc#util#close_floats() abort
|
|
||||||
echohl WarningMsg | echon 'coc#util#close_floats is deprecated, use coc#float#close_all instead' | echohl None
|
|
||||||
call coc#float#close_all()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#close_win(id)
|
|
||||||
echohl WarningMsg | echon 'coc#util#close_win is deprecated, use coc#float#close instead' | echohl None
|
|
||||||
call coc#float#close(a:id)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#float_scroll(forward)
|
|
||||||
echohl WarningMsg | echon 'coc#util#close_win is deprecated, use coc#float#scroll instead' | echohl None
|
|
||||||
call coc#float#scroll(a:forward)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" scroll float without exiting insert mode (nvim only)
|
|
||||||
function! coc#util#float_scroll_i(amount)
|
|
||||||
let float = coc#float#get_float_win()
|
|
||||||
if !float | return '' | endif
|
|
||||||
let buf = nvim_win_get_buf(float)
|
|
||||||
let buf_height = nvim_buf_line_count(buf)
|
|
||||||
let win_height = nvim_win_get_height(float)
|
|
||||||
if buf_height < win_height | return '' | endif
|
|
||||||
let pos = nvim_win_get_cursor(float)
|
|
||||||
try
|
|
||||||
let last_amount = nvim_win_get_var(float, 'coc_float_scroll_last_amount')
|
|
||||||
catch
|
|
||||||
let last_amount = 0
|
|
||||||
endtry
|
|
||||||
if a:amount > 0
|
|
||||||
if pos[0] == 1
|
|
||||||
let pos[0] += a:amount + win_height - 2
|
|
||||||
elseif last_amount > 0
|
|
||||||
let pos[0] += a:amount
|
|
||||||
else
|
|
||||||
let pos[0] += a:amount + win_height - 3
|
|
||||||
endif
|
|
||||||
let pos[0] = pos[0] < buf_height ? pos[0] : buf_height
|
|
||||||
elseif a:amount < 0
|
|
||||||
if pos[0] == buf_height
|
|
||||||
let pos[0] += a:amount - win_height + 2
|
|
||||||
elseif last_amount < 0
|
|
||||||
let pos[0] += a:amount
|
|
||||||
else
|
|
||||||
let pos[0] += a:amount - win_height + 3
|
|
||||||
endif
|
|
||||||
let pos[0] = pos[0] > 1 ? pos[0] : 1
|
|
||||||
endif
|
|
||||||
call nvim_win_set_var(float, 'coc_float_scroll_last_amount', a:amount)
|
|
||||||
call nvim_win_set_cursor(float, pos)
|
|
||||||
return ''
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" get cursor position
|
" get cursor position
|
||||||
function! coc#util#cursor()
|
function! coc#util#cursor()
|
||||||
let pos = getcurpos()
|
return [line('.') - 1, strchars(strpart(getline('.'), 0, col('.') - 1))]
|
||||||
let content = pos[2] == 1 ? '' : getline('.')[0: pos[2] - 2]
|
|
||||||
return [pos[1] - 1, strchars(content)]
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#path_replace_patterns() abort
|
function! coc#util#path_replace_patterns() abort
|
||||||
|
@ -178,20 +97,11 @@ function! coc#util#job_command()
|
||||||
echohl Error | echom '[coc.nvim] "'.node.'" is not executable, checkout https://nodejs.org/en/download/' | echohl None
|
echohl Error | echom '[coc.nvim] "'.node.'" is not executable, checkout https://nodejs.org/en/download/' | echohl None
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
if filereadable(s:root.'/bin/server.js') && filereadable(s:root.'/src/index.ts') && !get(g:, 'coc_force_bundle', 0)
|
|
||||||
if !filereadable(s:root.'/lib/attach.js')
|
|
||||||
echohl Error | echom '[coc.nvim] javascript bundle not found, please try :call coc#util#install()' | echohl None
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
"use javascript from lib
|
|
||||||
return [node] + get(g:, 'coc_node_args', ['--no-warnings']) + [s:root.'/bin/server.js']
|
|
||||||
else
|
|
||||||
if !filereadable(s:root.'/build/index.js')
|
if !filereadable(s:root.'/build/index.js')
|
||||||
echohl Error | echom '[coc.nvim] build/index.js not found, reinstall coc.nvim to fix it.' | echohl None
|
echohl Error | echom '[coc.nvim] build/index.js not found, please compile the code by esbuild.' | echohl None
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
return [node] + get(g:, 'coc_node_args', ['--no-warnings']) + [s:root.'/build/index.js']
|
return [node] + get(g:, 'coc_node_args', ['--no-warnings']) + [s:root.'/build/index.js']
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#echo_hover(msg)
|
function! coc#util#echo_hover(msg)
|
||||||
|
@ -212,13 +122,21 @@ function! coc#util#execute(cmd)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#jump(cmd, filepath, ...) abort
|
function! coc#util#jump(cmd, filepath, ...) abort
|
||||||
|
if a:cmd != 'pedit'
|
||||||
silent! normal! m'
|
silent! normal! m'
|
||||||
|
endif
|
||||||
let path = a:filepath
|
let path = a:filepath
|
||||||
if (has('win32unix'))
|
if (has('win32unix'))
|
||||||
let path = substitute(a:filepath, '\v\\', '/', 'g')
|
let path = substitute(a:filepath, '\v\\', '/', 'g')
|
||||||
endif
|
endif
|
||||||
let file = fnamemodify(path, ":~:.")
|
let file = fnamemodify(path, ":~:.")
|
||||||
|
if a:cmd == 'pedit'
|
||||||
|
let extra = empty(get(a:, 1, [])) ? '' : '+'.(a:1[0] + 1)
|
||||||
|
exe 'pedit '.extra.' '.fnameescape(file)
|
||||||
|
return
|
||||||
|
else
|
||||||
exe a:cmd.' '.fnameescape(file)
|
exe a:cmd.' '.fnameescape(file)
|
||||||
|
endif
|
||||||
if !empty(get(a:, 1, []))
|
if !empty(get(a:, 1, []))
|
||||||
let line = getline(a:1[0] + 1)
|
let line = getline(a:1[0] + 1)
|
||||||
" TODO need to use utf16 here
|
" TODO need to use utf16 here
|
||||||
|
@ -243,6 +161,13 @@ function! coc#util#jumpTo(line, character) abort
|
||||||
call cursor(a:line + 1, col)
|
call cursor(a:line + 1, col)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Position of cursor relative to screen cell
|
||||||
|
function! coc#util#cursor_pos() abort
|
||||||
|
let nr = winnr()
|
||||||
|
let [row, col] = win_screenpos(nr)
|
||||||
|
return [row + winline() - 2, col + wincol() - 2]
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! coc#util#echo_messages(hl, msgs)
|
function! coc#util#echo_messages(hl, msgs)
|
||||||
if a:hl !~# 'Error' && (mode() !~# '\v^(i|n)$')
|
if a:hl !~# 'Error' && (mode() !~# '\v^(i|n)$')
|
||||||
return
|
return
|
||||||
|
@ -275,7 +200,7 @@ function! s:Call(method, args)
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#get_bufoptions(bufnr) abort
|
function! coc#util#get_bufoptions(bufnr, maxFileSize) abort
|
||||||
if !bufloaded(a:bufnr) | return v:null | endif
|
if !bufloaded(a:bufnr) | return v:null | endif
|
||||||
let bufname = bufname(a:bufnr)
|
let bufname = bufname(a:bufnr)
|
||||||
let buftype = getbufvar(a:bufnr, '&buftype')
|
let buftype = getbufvar(a:bufnr, '&buftype')
|
||||||
|
@ -290,24 +215,29 @@ function! coc#util#get_bufoptions(bufnr) abort
|
||||||
elseif !empty(bufname)
|
elseif !empty(bufname)
|
||||||
let size = getfsize(bufname)
|
let size = getfsize(bufname)
|
||||||
endif
|
endif
|
||||||
|
let lines = []
|
||||||
|
if getbufvar(a:bufnr, 'coc_enabled', 1) && (buftype == '' || buftype == 'acwrite') && size < a:maxFileSize
|
||||||
|
let lines = getbufline(a:bufnr, 1, '$')
|
||||||
|
endif
|
||||||
return {
|
return {
|
||||||
\ 'bufname': bufname,
|
\ 'bufname': bufname,
|
||||||
\ 'size': size,
|
\ 'size': size,
|
||||||
\ 'eol': getbufvar(a:bufnr, '&eol'),
|
|
||||||
\ 'buftype': buftype,
|
\ 'buftype': buftype,
|
||||||
\ 'winid': winid,
|
\ 'winid': winid,
|
||||||
\ 'previewwindow': previewwindow == 0 ? v:false : v:true,
|
\ 'previewwindow': previewwindow == 0 ? v:false : v:true,
|
||||||
\ 'variables': s:variables(a:bufnr),
|
\ 'variables': s:variables(a:bufnr),
|
||||||
\ 'fullpath': empty(bufname) ? '' : fnamemodify(bufname, ':p'),
|
\ 'fullpath': empty(bufname) ? '' : fnamemodify(bufname, ':p'),
|
||||||
|
\ 'eol': getbufvar(a:bufnr, '&eol'),
|
||||||
\ 'filetype': getbufvar(a:bufnr, '&filetype'),
|
\ 'filetype': getbufvar(a:bufnr, '&filetype'),
|
||||||
\ 'iskeyword': getbufvar(a:bufnr, '&iskeyword'),
|
\ 'iskeyword': getbufvar(a:bufnr, '&iskeyword'),
|
||||||
\ 'changedtick': getbufvar(a:bufnr, 'changedtick'),
|
\ 'changedtick': getbufvar(a:bufnr, 'changedtick'),
|
||||||
|
\ 'lines': lines,
|
||||||
\}
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:variables(bufnr) abort
|
function! s:variables(bufnr) abort
|
||||||
let info = getbufinfo({'bufnr':a:bufnr, 'variables': 1})
|
let info = getbufinfo(a:bufnr)
|
||||||
let variables = copy(info[0]['variables'])
|
let variables = empty(info) ? {} : copy(info[0]['variables'])
|
||||||
for key in keys(variables)
|
for key in keys(variables)
|
||||||
if key !~# '\v^coc'
|
if key !~# '\v^coc'
|
||||||
unlet variables[key]
|
unlet variables[key]
|
||||||
|
@ -392,13 +322,11 @@ function! coc#util#get_data_home()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#get_input()
|
function! coc#util#get_input()
|
||||||
let pos = getcurpos()
|
let before = strpart(getline('.'), 0, col('.')-1)
|
||||||
let line = getline('.')
|
if len(before) == 0
|
||||||
let l:start = pos[2] - 1
|
return ''
|
||||||
while l:start > 0 && line[l:start - 1] =~# '\k'
|
endif
|
||||||
let l:start -= 1
|
return matchstr(before, '\k*$')
|
||||||
endwhile
|
|
||||||
return pos[2] == 1 ? '' : line[l:start : pos[2] - 2]
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#move_cursor(delta)
|
function! coc#util#move_cursor(delta)
|
||||||
|
@ -407,26 +335,13 @@ function! coc#util#move_cursor(delta)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#get_complete_option()
|
function! coc#util#get_complete_option()
|
||||||
let disabled = get(b:, 'coc_suggest_disable', 0)
|
|
||||||
if disabled | return | endif
|
|
||||||
let blacklist = get(b:, 'coc_suggest_blacklist', [])
|
|
||||||
let pos = getcurpos()
|
let pos = getcurpos()
|
||||||
let l:start = pos[2] - 1
|
|
||||||
let line = getline(pos[1])
|
let line = getline(pos[1])
|
||||||
for char in reverse(split(line[0: l:start - 1], '\zs'))
|
let input = matchstr(strpart(line, 0, pos[2] - 1), '\k*$')
|
||||||
if l:start > 0 && char =~# '\k'
|
let col = pos[2] - strlen(input)
|
||||||
let l:start = l:start - strlen(char)
|
let synname = synIDattr(synID(pos[1], col, 1), 'name')
|
||||||
else
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
let input = pos[2] == 1 ? '' : line[l:start : pos[2] - 2]
|
|
||||||
if !empty(blacklist) && index(blacklist, input) >= 0
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
let synname = synIDattr(synID(pos[1], l:start, 1),"name")
|
|
||||||
return {
|
return {
|
||||||
\ 'word': matchstr(line[l:start : ], '^\k\+'),
|
\ 'word': matchstr(strpart(line, col - 1), '^\k\+'),
|
||||||
\ 'input': empty(input) ? '' : input,
|
\ 'input': empty(input) ? '' : input,
|
||||||
\ 'line': line,
|
\ 'line': line,
|
||||||
\ 'filetype': &filetype,
|
\ 'filetype': &filetype,
|
||||||
|
@ -434,10 +349,10 @@ function! coc#util#get_complete_option()
|
||||||
\ 'bufnr': bufnr('%'),
|
\ 'bufnr': bufnr('%'),
|
||||||
\ 'linenr': pos[1],
|
\ 'linenr': pos[1],
|
||||||
\ 'colnr' : pos[2],
|
\ 'colnr' : pos[2],
|
||||||
\ 'col': l:start,
|
\ 'col': col - 1,
|
||||||
\ 'synname': synname,
|
\ 'synname': synname,
|
||||||
\ 'changedtick': b:changedtick,
|
\ 'changedtick': b:changedtick,
|
||||||
\ 'blacklist': blacklist,
|
\ 'blacklist': get(b:, 'coc_suggest_blacklist', []),
|
||||||
\}
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -475,6 +390,7 @@ function! coc#util#quickpick(title, items, cb) abort
|
||||||
\ 'filter': function('s:QuickpickFilter'),
|
\ 'filter': function('s:QuickpickFilter'),
|
||||||
\ 'callback': function('s:QuickpickHandler'),
|
\ 'callback': function('s:QuickpickHandler'),
|
||||||
\ })
|
\ })
|
||||||
|
redraw
|
||||||
catch /.*/
|
catch /.*/
|
||||||
call a:cb(v:exception)
|
call a:cb(v:exception)
|
||||||
endtry
|
endtry
|
||||||
|
@ -484,55 +400,6 @@ function! coc#util#quickpick(title, items, cb) abort
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#prompt(title, cb) abort
|
|
||||||
if exists('*popup_dialog')
|
|
||||||
function! s:PromptHandler(id, result) closure
|
|
||||||
call a:cb(v:null, a:result)
|
|
||||||
endfunction
|
|
||||||
try
|
|
||||||
call popup_dialog(a:title. ' (y/n)', #{
|
|
||||||
\ filter: 'popup_filter_yesno',
|
|
||||||
\ callback: function('s:PromptHandler'),
|
|
||||||
\ })
|
|
||||||
catch /.*/
|
|
||||||
call a:cb(v:exception)
|
|
||||||
endtry
|
|
||||||
elseif !s:is_vim && exists('*confirm')
|
|
||||||
let choice = confirm(a:title, "&Yes\n&No")
|
|
||||||
call a:cb(v:null, choice == 1)
|
|
||||||
else
|
|
||||||
echohl MoreMsg
|
|
||||||
echom a:title.' (y/n)'
|
|
||||||
echohl None
|
|
||||||
let confirm = nr2char(getchar())
|
|
||||||
redraw!
|
|
||||||
if !(confirm ==? "y" || confirm ==? "\r")
|
|
||||||
echohl Moremsg | echo 'Cancelled.' | echohl None
|
|
||||||
return 0
|
|
||||||
call a:cb(v:null, 0)
|
|
||||||
end
|
|
||||||
call a:cb(v:null, 1)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#prompt_confirm(title)
|
|
||||||
if exists('*confirm') && !s:is_vim
|
|
||||||
let choice = confirm(a:title, "&Yes\n&No")
|
|
||||||
return choice == 1
|
|
||||||
else
|
|
||||||
echohl MoreMsg
|
|
||||||
echom a:title.' (y/n)'
|
|
||||||
echohl None
|
|
||||||
let confirm = nr2char(getchar())
|
|
||||||
redraw!
|
|
||||||
if !(confirm ==? "y" || confirm ==? "\r")
|
|
||||||
echohl Moremsg | echo 'Cancelled.' | echohl None
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#get_syntax_name(lnum, col)
|
function! coc#util#get_syntax_name(lnum, col)
|
||||||
return synIDattr(synIDtrans(synID(a:lnum,a:col,1)),"name")
|
return synIDattr(synIDtrans(synID(a:lnum,a:col,1)),"name")
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -654,10 +521,10 @@ endfunction
|
||||||
|
|
||||||
function! coc#util#vim_info()
|
function! coc#util#vim_info()
|
||||||
return {
|
return {
|
||||||
|
\ 'apiversion': s:vim_api_version,
|
||||||
\ 'mode': mode(),
|
\ 'mode': mode(),
|
||||||
\ 'floating': has('nvim') && exists('*nvim_open_win') ? v:true : v:false,
|
\ 'floating': has('nvim') && exists('*nvim_open_win') ? v:true : v:false,
|
||||||
\ 'extensionRoot': coc#util#extension_root(),
|
\ 'extensionRoot': coc#util#extension_root(),
|
||||||
\ 'watchExtensions': get(g:, 'coc_watch_extensions', []),
|
|
||||||
\ 'globalExtensions': get(g:, 'coc_global_extensions', []),
|
\ 'globalExtensions': get(g:, 'coc_global_extensions', []),
|
||||||
\ 'config': get(g:, 'coc_user_config', {}),
|
\ 'config': get(g:, 'coc_user_config', {}),
|
||||||
\ 'pid': coc#util#getpid(),
|
\ 'pid': coc#util#getpid(),
|
||||||
|
@ -680,7 +547,9 @@ function! coc#util#vim_info()
|
||||||
\ 'progpath': v:progpath,
|
\ 'progpath': v:progpath,
|
||||||
\ 'guicursor': &guicursor,
|
\ 'guicursor': &guicursor,
|
||||||
\ 'vimCommands': get(g:, 'coc_vim_commands', []),
|
\ 'vimCommands': get(g:, 'coc_vim_commands', []),
|
||||||
|
\ 'sign': exists('*sign_place') && exists('*sign_unplace'),
|
||||||
\ 'textprop': has('textprop') && has('patch-8.1.1719') && !has('nvim') ? v:true : v:false,
|
\ 'textprop': has('textprop') && has('patch-8.1.1719') && !has('nvim') ? v:true : v:false,
|
||||||
|
\ 'dialog': has('nvim-0.4.0') || has('patch-8.2.0750') ? v:true : v:false,
|
||||||
\ 'disabledSources': get(g:, 'coc_sources_disable_map', {}),
|
\ 'disabledSources': get(g:, 'coc_sources_disable_map', {}),
|
||||||
\}
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -693,11 +562,53 @@ function! coc#util#highlight_options()
|
||||||
\}
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" used by vim
|
function! coc#util#set_lines(bufnr, replacement, start, end) abort
|
||||||
function! coc#util#get_content(bufnr)
|
if !s:is_vim
|
||||||
if !bufloaded(a:bufnr) | return '' | endif
|
call nvim_buf_set_lines(a:bufnr, a:start, a:end, 0, a:replacement)
|
||||||
|
else
|
||||||
|
call coc#api#notify('buf_set_lines', [a:bufnr, a:start, a:end, 0, a:replacement])
|
||||||
|
endif
|
||||||
return {
|
return {
|
||||||
\ 'content': join(getbufline(a:bufnr, 1, '$'), "\n"),
|
\ 'lines': getbufline(a:bufnr, 1, '$'),
|
||||||
|
\ 'changedtick': getbufvar(a:bufnr, 'changedtick')
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! coc#util#change_lines(bufnr, list) abort
|
||||||
|
if !bufloaded(a:bufnr) | return v:null | endif
|
||||||
|
undojoin
|
||||||
|
if exists('*setbufline')
|
||||||
|
for [lnum, line] in a:list
|
||||||
|
call setbufline(a:bufnr, lnum + 1, line)
|
||||||
|
endfor
|
||||||
|
elseif a:bufnr == bufnr('%')
|
||||||
|
for [lnum, line] in a:list
|
||||||
|
call setline(lnum + 1, line)
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
let bufnr = bufnr('%')
|
||||||
|
exe 'noa buffer '.a:bufnr
|
||||||
|
for [lnum, line] in a:list
|
||||||
|
call setline(lnum + 1, line)
|
||||||
|
endfor
|
||||||
|
exe 'noa buffer '.bufnr
|
||||||
|
endif
|
||||||
|
return {
|
||||||
|
\ 'lines': getbufline(a:bufnr, 1, '$'),
|
||||||
|
\ 'changedtick': getbufvar(a:bufnr, 'changedtick')
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" used by vim
|
||||||
|
function! coc#util#get_buf_lines(bufnr, changedtick)
|
||||||
|
if !bufloaded(a:bufnr) | return '' | endif
|
||||||
|
let changedtick = getbufvar(a:bufnr, 'changedtick')
|
||||||
|
if changedtick == a:changedtick
|
||||||
|
return v:null
|
||||||
|
endif
|
||||||
|
return {
|
||||||
|
\ 'lines': getbufline(a:bufnr, 1, '$'),
|
||||||
\ 'changedtick': getbufvar(a:bufnr, 'changedtick')
|
\ 'changedtick': getbufvar(a:bufnr, 'changedtick')
|
||||||
\ }
|
\ }
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -758,9 +669,10 @@ function! coc#util#open_url(url)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#install() abort
|
function! coc#util#install() abort
|
||||||
|
let yarncmd = get(g:, 'coc_install_yarn_cmd', executable('yarnpkg') ? 'yarnpkg' : 'yarn')
|
||||||
call coc#util#open_terminal({
|
call coc#util#open_terminal({
|
||||||
\ 'cwd': s:root,
|
\ 'cwd': s:root,
|
||||||
\ 'cmd': 'yarn install --frozen-lockfile',
|
\ 'cmd': yarncmd.' install --frozen-lockfile --ignore-engines',
|
||||||
\ 'autoclose': 0,
|
\ 'autoclose': 0,
|
||||||
\ })
|
\ })
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -940,26 +852,6 @@ function! coc#util#set_buf_var(bufnr, name, val) abort
|
||||||
call setbufvar(a:bufnr, a:name, a:val)
|
call setbufvar(a:bufnr, a:name, a:val)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#change_lines(bufnr, list) abort
|
|
||||||
if !bufloaded(a:bufnr) | return | endif
|
|
||||||
if exists('*setbufline')
|
|
||||||
for [lnum, line] in a:list
|
|
||||||
call setbufline(a:bufnr, lnum + 1, line)
|
|
||||||
endfor
|
|
||||||
elseif a:bufnr == bufnr('%')
|
|
||||||
for [lnum, line] in a:list
|
|
||||||
call setline(lnum + 1, line)
|
|
||||||
endfor
|
|
||||||
else
|
|
||||||
let bufnr = bufnr('%')
|
|
||||||
exe 'noa buffer '.a:bufnr
|
|
||||||
for [lnum, line] in a:list
|
|
||||||
call setline(lnum + 1, line)
|
|
||||||
endfor
|
|
||||||
exe 'noa buffer '.bufnr
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#unmap(bufnr, keys) abort
|
function! coc#util#unmap(bufnr, keys) abort
|
||||||
if bufnr('%') == a:bufnr
|
if bufnr('%') == a:bufnr
|
||||||
for key in a:keys
|
for key in a:keys
|
||||||
|
@ -973,6 +865,7 @@ function! coc#util#open_files(files)
|
||||||
" added on latest vim8
|
" added on latest vim8
|
||||||
if exists('*bufadd') && exists('*bufload')
|
if exists('*bufadd') && exists('*bufload')
|
||||||
for file in a:files
|
for file in a:files
|
||||||
|
let file = fnamemodify(file, ':.')
|
||||||
if bufloaded(file)
|
if bufloaded(file)
|
||||||
call add(bufnrs, bufnr(file))
|
call add(bufnrs, bufnr(file))
|
||||||
else
|
else
|
||||||
|
@ -985,6 +878,7 @@ function! coc#util#open_files(files)
|
||||||
else
|
else
|
||||||
noa keepalt 1new +setl\ bufhidden=wipe
|
noa keepalt 1new +setl\ bufhidden=wipe
|
||||||
for file in a:files
|
for file in a:files
|
||||||
|
let file = fnamemodify(file, ':.')
|
||||||
execute 'noa edit +setl\ bufhidden=hide '.fnameescape(file)
|
execute 'noa edit +setl\ bufhidden=hide '.fnameescape(file)
|
||||||
if &filetype ==# ''
|
if &filetype ==# ''
|
||||||
filetype detect
|
filetype detect
|
||||||
|
@ -1037,67 +931,23 @@ function! coc#util#get_format_opts(bufnr) abort
|
||||||
return [tabsize, &expandtab]
|
return [tabsize, &expandtab]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! coc#util#clear_pos_matches(match, ...) abort
|
|
||||||
let winid = get(a:, 1, win_getid())
|
|
||||||
if empty(getwininfo(winid))
|
|
||||||
" not valid
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
if win_getid() == winid
|
|
||||||
let arr = filter(getmatches(), 'v:val["group"] =~# "'.a:match.'"')
|
|
||||||
for item in arr
|
|
||||||
call matchdelete(item['id'])
|
|
||||||
endfor
|
|
||||||
elseif s:clear_match_by_id
|
|
||||||
let arr = filter(getmatches(winid), 'v:val["group"] =~# "'.a:match.'"')
|
|
||||||
for item in arr
|
|
||||||
call matchdelete(item['id'], winid)
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! coc#util#clearmatches(ids, ...)
|
function! coc#util#clearmatches(ids, ...)
|
||||||
let winid = get(a:, 1, win_getid())
|
let winid = get(a:, 1, win_getid())
|
||||||
if empty(getwininfo(winid))
|
call coc#highlight#clear_matches(winid, a:ids)
|
||||||
return
|
|
||||||
endif
|
|
||||||
if win_getid() == winid
|
|
||||||
for id in a:ids
|
|
||||||
try
|
|
||||||
call matchdelete(id)
|
|
||||||
catch /.*/
|
|
||||||
" matches have been cleared in other ways,
|
|
||||||
endtry
|
|
||||||
endfor
|
|
||||||
elseif s:clear_match_by_id
|
|
||||||
for id in a:ids
|
|
||||||
try
|
|
||||||
call matchdelete(id, winid)
|
|
||||||
catch /.*/
|
|
||||||
" matches have been cleared in other ways,
|
|
||||||
endtry
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" clear document highlights of current window
|
" Character offset of current cursor
|
||||||
function! coc#util#clear_highlights(...) abort
|
function! coc#util#get_offset() abort
|
||||||
let winid = get(a:, 1, win_getid())
|
let offset = 0
|
||||||
if empty(getwininfo(winid))
|
let lnum = line('.')
|
||||||
" not valid
|
for i in range(1, lnum)
|
||||||
return
|
if i == lnum
|
||||||
|
let offset += strchars(strpart(getline('.'), 0, col('.')-1))
|
||||||
|
else
|
||||||
|
let offset += strchars(getline(i)) + 1
|
||||||
endif
|
endif
|
||||||
if winid == win_getid()
|
|
||||||
let arr = filter(getmatches(), 'v:val["group"] =~# "^CocHighlight"')
|
|
||||||
for item in arr
|
|
||||||
call matchdelete(item['id'])
|
|
||||||
endfor
|
endfor
|
||||||
elseif s:clear_match_by_id
|
return offset
|
||||||
let arr = filter(getmatches(winid), 'v:val["group"] =~# "^CocHighlight"')
|
|
||||||
for item in arr
|
|
||||||
call matchdelete(item['id'], winid)
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Make sure window exists
|
" Make sure window exists
|
||||||
|
@ -1107,11 +957,3 @@ function! coc#util#win_gotoid(winid) abort
|
||||||
throw 'Invalid window number'
|
throw 'Invalid window number'
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Make sure pum is visible
|
|
||||||
function! coc#util#pumvisible() abort
|
|
||||||
let visible = pumvisible()
|
|
||||||
if !visible
|
|
||||||
throw 'Pum not visible'
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
|
@ -41,20 +41,11 @@ function! s:checkEnvironment() abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:checkCommand()
|
function! s:checkCommand()
|
||||||
let file = s:root.'/bin/server.js'
|
|
||||||
if filereadable(file)
|
|
||||||
if !filereadable(s:root.'/lib/attach.js')
|
|
||||||
call health#report_error('Javascript entry not found, run "yarn install --frozen-lockfile" in terminal to fix it.')
|
|
||||||
else
|
|
||||||
call health#report_ok('Javascript entry lib/attach.js found')
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let file = s:root.'/build/index.js'
|
let file = s:root.'/build/index.js'
|
||||||
if filereadable(file)
|
if filereadable(file)
|
||||||
call health#report_ok('Javascript bundle build/index.js found')
|
call health#report_ok('Javascript bundle build/index.js found')
|
||||||
else
|
else
|
||||||
call health#report_error('Javascript entry not found, reinstall coc.nvim to fix it.')
|
call health#report_error('Javascript entry not found, please compile coc.nvim by esbuild.')
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
73
pack/acp/opt/coc.nvim/bin/prompt.js
Normal file
73
pack/acp/opt/coc.nvim/bin/prompt.js
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Used for prompt popup on vim
|
||||||
|
*/
|
||||||
|
const readline = require("readline")
|
||||||
|
const rl = readline.createInterface({
|
||||||
|
input: process.stdin,
|
||||||
|
output: process.stdout,
|
||||||
|
escapeCodeTimeout: 0
|
||||||
|
})
|
||||||
|
rl.setPrompt('')
|
||||||
|
let value = process.argv[2]
|
||||||
|
if (value) {
|
||||||
|
rl.write(value)
|
||||||
|
}
|
||||||
|
rl.on('line', input => {
|
||||||
|
let text = input.replace(/"/g, '\\"')
|
||||||
|
console.log(createSequences(JSON.stringify(['call', 'CocPopupCallback', ['confirm', text]])))
|
||||||
|
process.exit()
|
||||||
|
})
|
||||||
|
|
||||||
|
function createSequences(str) {
|
||||||
|
return '\033]51;' + str + '\x07'
|
||||||
|
}
|
||||||
|
|
||||||
|
process.stdin.on('keypress', (_, key) => {
|
||||||
|
if (key) {
|
||||||
|
let k = getKey(key)
|
||||||
|
if (k == '<bs>') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (k == '<cr>') {
|
||||||
|
process.exit()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (k == '<esc>') {
|
||||||
|
console.log(createSequences(JSON.stringify(['call', 'CocPopupCallback', ['exit', '']])))
|
||||||
|
process.exit()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (k) {
|
||||||
|
console.log(createSequences(JSON.stringify(['call', 'CocPopupCallback', ['send', k]])))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
function getKey(key) {
|
||||||
|
if (key.sequence == '\u001b') {
|
||||||
|
return '<esc>'
|
||||||
|
}
|
||||||
|
if (key.sequence == '\r') {
|
||||||
|
return '<cr>'
|
||||||
|
}
|
||||||
|
if (key.sequence == '\t') {
|
||||||
|
return key.shift ? '<s-tab>' : '<tab>'
|
||||||
|
}
|
||||||
|
// handle them can cause bug with terminal
|
||||||
|
// if (key.name == 'backspace') {
|
||||||
|
// return '<bs>'
|
||||||
|
// }
|
||||||
|
// if (key.name == 'left') {
|
||||||
|
// return '<left>'
|
||||||
|
// }
|
||||||
|
// if (key.name == 'right') {
|
||||||
|
// return '<right>'
|
||||||
|
// }
|
||||||
|
if (key.name == 'up') {
|
||||||
|
return '<up>'
|
||||||
|
}
|
||||||
|
if (key.name == 'down') {
|
||||||
|
return '<down>'
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
0
pack/acp/opt/coc.nvim/terminateProcess.sh → pack/acp/opt/coc.nvim/bin/terminateProcess.sh
Normal file → Executable file
0
pack/acp/opt/coc.nvim/terminateProcess.sh → pack/acp/opt/coc.nvim/bin/terminateProcess.sh
Normal file → Executable file
File diff suppressed because one or more lines are too long
|
@ -331,8 +331,8 @@
|
||||||
},
|
},
|
||||||
"suggest.detailField": {
|
"suggest.detailField": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "menu",
|
"default": "preview",
|
||||||
"description": "Where to add the detail in complete item when it's less than max length.",
|
"description": "Where to show the detail text of CompleteItem from LS.",
|
||||||
"enum": ["abbr", "menu", "preview"]
|
"enum": ["abbr", "menu", "preview"]
|
||||||
},
|
},
|
||||||
"suggest.autoTrigger": {
|
"suggest.autoTrigger": {
|
||||||
|
@ -348,7 +348,7 @@
|
||||||
},
|
},
|
||||||
"suggest.numberSelect": {
|
"suggest.numberSelect": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Input number to select complete item, works on neovim >= 0.4.3 only.",
|
"description": "Input number to select complete item, works on neovim >= 0.4.0 only.",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"suggest.disableKind": {
|
"suggest.disableKind": {
|
||||||
|
@ -410,7 +410,7 @@
|
||||||
},
|
},
|
||||||
"suggest.triggerCompletionWait": {
|
"suggest.triggerCompletionWait": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"default": 50,
|
"default": 100,
|
||||||
"minimum": 30,
|
"minimum": 30,
|
||||||
"maximum": 500,
|
"maximum": 500,
|
||||||
"description": "Wait time between text change and completion start, cancel completion when text changed during wait."
|
"description": "Wait time between text change and completion start, cancel completion when text changed during wait."
|
||||||
|
@ -456,7 +456,7 @@
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Default sorting behavior for suggested completion items.",
|
"description": "Default sorting behavior for suggested completion items.",
|
||||||
"default": "length",
|
"default": "length",
|
||||||
"enum": ["length", "alphabetical"]
|
"enum": ["length", "alphabetical", "none"]
|
||||||
},
|
},
|
||||||
"suggest.completionItemKindLabels": {
|
"suggest.completionItemKindLabels": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
@ -542,11 +542,6 @@
|
||||||
"description": "Enable diagnostic refresh on insert mode, default false.",
|
"description": "Enable diagnostic refresh on insert mode, default false.",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"diagnostic.refreshAfterSave": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Only refresh diagnostics after save, default false.",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"diagnostic.displayByAle": {
|
"diagnostic.displayByAle": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Use Ale for display diagnostics in vim, will disable coc for display diagnostics, restart required on change.",
|
"description": "Use Ale for display diagnostics in vim, will disable coc for display diagnostics, restart required on change.",
|
||||||
|
@ -598,10 +593,10 @@
|
||||||
"description": "Offset number of buffer.addHighlight, neovim only.",
|
"description": "Offset number of buffer.addHighlight, neovim only.",
|
||||||
"default": 1000
|
"default": 1000
|
||||||
},
|
},
|
||||||
"diagnostic.signOffset": {
|
"diagnostic.signPriority": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"description": "Offset number of sign",
|
"description": "Priority of diagnostic signs, default to 10",
|
||||||
"default": 1000
|
"default": 10
|
||||||
},
|
},
|
||||||
"diagnostic.errorSign": {
|
"diagnostic.errorSign": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
@ -640,7 +635,7 @@
|
||||||
},
|
},
|
||||||
"diagnostic.format": {
|
"diagnostic.format": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Define the diagnostic format. Available parts: source, code, severity, message",
|
"description": "Define the diagnostic format that shown in float window or echoed, available parts: source, code, severity, message",
|
||||||
"default": "[%source%code] [%severity] %message"
|
"default": "[%source%code] [%severity] %message"
|
||||||
},
|
},
|
||||||
"diagnostic.separateRelatedInformationAsDiagnostics": {
|
"diagnostic.separateRelatedInformationAsDiagnostics": {
|
||||||
|
@ -648,6 +643,16 @@
|
||||||
"default": false,
|
"default": false,
|
||||||
"description": "Separate related information as diagnostics"
|
"description": "Separate related information as diagnostics"
|
||||||
},
|
},
|
||||||
|
"diagnostic.showUnused": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Show unused variables"
|
||||||
|
},
|
||||||
|
"diagnostic.showDeprecated": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Show deprecated variables"
|
||||||
|
},
|
||||||
"signature.enable": {
|
"signature.enable": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Enable signature help when trigger character typed, require restart service on change.",
|
"description": "Enable signature help when trigger character typed, require restart service on change.",
|
||||||
|
@ -655,15 +660,16 @@
|
||||||
},
|
},
|
||||||
"signature.triggerSignatureWait": {
|
"signature.triggerSignatureWait": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"default": 50,
|
"default": 500,
|
||||||
"minimum": 50,
|
"minimum": 200,
|
||||||
"maximum": 300,
|
"maximum": 1000,
|
||||||
"description": "Timeout for trigger signature help, in miliseconds."
|
"description": "Timeout for trigger signature help, in miliseconds."
|
||||||
},
|
},
|
||||||
"signature.target": {
|
"signature.target": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Target of signature help, use float when possible by default.",
|
"description": "Target of signature help, use float when possible by default.",
|
||||||
"enum": ["float", "echo", "preview"]
|
"default": "float",
|
||||||
|
"enum": ["float", "echo"]
|
||||||
},
|
},
|
||||||
"signature.maxWindowWidth": {
|
"signature.maxWindowWidth": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
|
@ -683,7 +689,7 @@
|
||||||
},
|
},
|
||||||
"signature.hideOnTextChange": {
|
"signature.hideOnTextChange": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Hide signature float window when text changed, require restart service on change.",
|
"description": "Hide signature float window when text changed on insert mode.",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"codeLens.enable": {
|
"codeLens.enable": {
|
||||||
|
@ -706,6 +712,11 @@
|
||||||
"description": "Open command for refactor window.",
|
"description": "Open command for refactor window.",
|
||||||
"default": "vsplit"
|
"default": "vsplit"
|
||||||
},
|
},
|
||||||
|
"refactor.saveToFile": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Save to file when write refactor buffer with ':noa wa' command, set to false if you want save buffer by yourself.",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
"refactor.beforeContext": {
|
"refactor.beforeContext": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"default": 3,
|
"default": 3,
|
||||||
|
@ -716,6 +727,71 @@
|
||||||
"default": 3,
|
"default": 3,
|
||||||
"description": "Print num lines of trailing context after each match."
|
"description": "Print num lines of trailing context after each match."
|
||||||
},
|
},
|
||||||
|
"dialog.maxHeight": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 20,
|
||||||
|
"description": "Maximum height of dialog window."
|
||||||
|
},
|
||||||
|
"dialog.maxWidth": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 80,
|
||||||
|
"description": "Maximum width of dialog window."
|
||||||
|
},
|
||||||
|
"dialog.confirmKey": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "<cr>",
|
||||||
|
"description": "Confirm key for confirm selection used by menu and picker, you can always use <esc> to cancel."
|
||||||
|
},
|
||||||
|
"dialog.pickerButtons": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Show buttons for picker dialog window/popup."
|
||||||
|
},
|
||||||
|
"dialog.pickerButtonShortcut": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Show shortcut in buttons of picker dialog window/popup, used when dialog.pickerButtons is true."
|
||||||
|
},
|
||||||
|
"dialog.floatHighlight": {
|
||||||
|
"type": ["string", "null"],
|
||||||
|
"default": null,
|
||||||
|
"description": "Highlight group for dialog window/popup, default to 'CocFloating'"
|
||||||
|
},
|
||||||
|
"dialog.floatBorderHighlight": {
|
||||||
|
"type": ["string", "null"],
|
||||||
|
"default": null,
|
||||||
|
"description": "Highlight group for border of dialog window/popup, default to 'CocFloating'"
|
||||||
|
},
|
||||||
|
"notification.marginTop": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 1,
|
||||||
|
"description": "Margin top for notification dialog."
|
||||||
|
},
|
||||||
|
"notification.marginRight": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 1,
|
||||||
|
"description": "Margin right for notification dialog."
|
||||||
|
},
|
||||||
|
"notification.maxWidth": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 60,
|
||||||
|
"description": "Maximum content width of notification dialog."
|
||||||
|
},
|
||||||
|
"notification.maxHeight": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 10,
|
||||||
|
"description": "Maximum content height of notification dialog."
|
||||||
|
},
|
||||||
|
"notification.highlightGroup": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "CocFloating",
|
||||||
|
"description": "Highlight group of notification dialog."
|
||||||
|
},
|
||||||
|
"notification.minProgressWidth": {
|
||||||
|
"type": "number",
|
||||||
|
"default": 30,
|
||||||
|
"description": "Minimum width of progress notification."
|
||||||
|
},
|
||||||
"workspace.ignoredFiletypes": {
|
"workspace.ignoredFiletypes": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"default": ["markdown", "log", "txt", "help"],
|
"default": ["markdown", "log", "txt", "help"],
|
||||||
|
@ -724,11 +800,29 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"workspace.bottomUpFiletypes": {
|
||||||
|
"type": "array",
|
||||||
|
"default": [],
|
||||||
|
"description": "Filetypes that should have workspace folder should resolved from base directory of file.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"workspace.workspaceFolderCheckCwd": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Whether the cwd directory should be checked first when resolving workspace folder."
|
||||||
|
},
|
||||||
"list.indicator": {
|
"list.indicator": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": ">",
|
"default": ">",
|
||||||
"description": "The character used as first character in prompt line"
|
"description": "The character used as first character in prompt line"
|
||||||
},
|
},
|
||||||
|
"list.alignColumns": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"description": "Whether to align lists in columns, default: `false`"
|
||||||
|
},
|
||||||
"list.interactiveDebounceTime": {
|
"list.interactiveDebounceTime": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"default": 100,
|
"default": 100,
|
||||||
|
@ -739,6 +833,21 @@
|
||||||
"default": 10,
|
"default": 10,
|
||||||
"description": "Height of split list window."
|
"description": "Height of split list window."
|
||||||
},
|
},
|
||||||
|
"list.statusLineSegments": {
|
||||||
|
"type": ["array", "null"],
|
||||||
|
"default": [
|
||||||
|
"%#CocListMode#-- %{get(b:list_status, \"mode\", \"\")} --%*",
|
||||||
|
"%{get(b:list_status, \"loading\", \"\")}",
|
||||||
|
"%{get(b:list_status, \"args\", \"\")}",
|
||||||
|
"(%L/%{get(b:list_status, \"total\", \"\")})",
|
||||||
|
"%=",
|
||||||
|
"%#CocListPath# %{get(b:list_status, \"cwd\", \"\")} %l/%L%*"
|
||||||
|
],
|
||||||
|
"items": {
|
||||||
|
"types": "string"
|
||||||
|
},
|
||||||
|
"description": "An array of statusline segments that will be used to draw the status line for list windows."
|
||||||
|
},
|
||||||
"list.signOffset": {
|
"list.signOffset": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"default": 900,
|
"default": 900,
|
||||||
|
@ -769,6 +878,11 @@
|
||||||
"default": false,
|
"default": false,
|
||||||
"description": "Use vsplit for preview window."
|
"description": "Use vsplit for preview window."
|
||||||
},
|
},
|
||||||
|
"list.matchHighlightGroup": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "Search",
|
||||||
|
"description": "Highlight group used for matched texts in list window."
|
||||||
|
},
|
||||||
"list.previewHighlightGroup": {
|
"list.previewHighlightGroup": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "Search",
|
"default": "Search",
|
||||||
|
@ -794,10 +908,21 @@
|
||||||
"default": {},
|
"default": {},
|
||||||
"description": "Custom keymappings on insert mode."
|
"description": "Custom keymappings on insert mode."
|
||||||
},
|
},
|
||||||
|
"list.source.diagnostics.includeCode": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether to show the diagnostic code in the list.",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"list.source.diagnostics.pathFormat": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Decide how the filepath is shown in the list.",
|
||||||
|
"enum": ["full", "short", "filename", "hidden"],
|
||||||
|
"default": "full"
|
||||||
|
},
|
||||||
"list.source.symbols.excludes": {
|
"list.source.symbols.excludes": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"default": [],
|
"default": [],
|
||||||
"description": "Patterns of mimimatch for filepath to execlude from symbols list.",
|
"description": "Patterns of minimatch for filepath to execlude from symbols list.",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
|
@ -825,6 +950,11 @@
|
||||||
"default": "<C-p>",
|
"default": "<C-p>",
|
||||||
"description": "Key used for jump to previous cursors position."
|
"description": "Key used for jump to previous cursors position."
|
||||||
},
|
},
|
||||||
|
"coc.preferences.enableMessageDialog": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"description": "Enable messages shown in notification dialog."
|
||||||
|
},
|
||||||
"coc.preferences.maxFileSize": {
|
"coc.preferences.maxFileSize": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "10MB",
|
"default": "10MB",
|
||||||
|
@ -890,11 +1020,6 @@
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"coc.preferences.formatOnInsertLeave": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Trigger format on type when insert leave by send \n to the server.",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"coc.preferences.enableFloatHighlight": {
|
"coc.preferences.enableFloatHighlight": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Enable highlight for floating window.",
|
"description": "Enable highlight for floating window.",
|
||||||
|
@ -916,7 +1041,7 @@
|
||||||
"coc.preferences.jumpCommand": {
|
"coc.preferences.jumpCommand": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Command used for location jump, like goto definition, goto references etc.",
|
"description": "Command used for location jump, like goto definition, goto references etc.",
|
||||||
"enum": ["edit", "split", "vsplit", "tabe", "drop", "tab drop"],
|
"enum": ["edit", "split", "vsplit", "tabe", "drop", "tab drop", "pedit"],
|
||||||
"default": "edit"
|
"default": "edit"
|
||||||
},
|
},
|
||||||
"coc.preferences.messageLevel": {
|
"coc.preferences.messageLevel": {
|
||||||
|
@ -962,7 +1087,7 @@
|
||||||
},
|
},
|
||||||
"coc.preferences.promptInput": {
|
"coc.preferences.promptInput": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Use prompt buffer in float window for user input, works on neovim >= 0.4.3 only.",
|
"description": "Use prompt buffer in float window for user input.",
|
||||||
"default": true
|
"default": true
|
||||||
},
|
},
|
||||||
"coc.preferences.enableMarkdown": {
|
"coc.preferences.enableMarkdown": {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
||||||
*coc-nvim.txt* LSP support for Vim & Neovim.
|
*coc-nvim.txt* LSP support for Vim & Neovim.
|
||||||
|
|
||||||
Version: 0.0.79
|
Version: 0.0.80
|
||||||
Author: Qiming Zhao <chemzqm at gmail.com>
|
Author: Qiming Zhao <chemzqm at gmail.com>
|
||||||
License: MIT license
|
License: MIT license
|
||||||
|
|
||||||
|
@ -34,6 +34,12 @@ List |coc-list|
|
||||||
Links |coc-list-links|
|
Links |coc-list-links|
|
||||||
Sources |coc-list-completion-sources|
|
Sources |coc-list-completion-sources|
|
||||||
Lists |coc-list-lists|
|
Lists |coc-list-lists|
|
||||||
|
Dialog |coc-dialog|
|
||||||
|
Dialog basic |coc-dialog-basic|
|
||||||
|
Dialog confirm |coc-dialog-confirm|
|
||||||
|
Dialog input |coc-dialog-input|
|
||||||
|
Dialog menu |coc-dialog-menu|
|
||||||
|
Dialog picker |coc-dialog-picker|
|
||||||
Statusline support |coc-status|
|
Statusline support |coc-status|
|
||||||
Manual |coc-status-manual|
|
Manual |coc-status-manual|
|
||||||
Airline |coc-status-airline|
|
Airline |coc-status-airline|
|
||||||
|
@ -76,7 +82,7 @@ INSTALLATION *coc-installation*
|
||||||
If you're using [vim-plug](https://github.com/junegunn/vim-plug), add this to
|
If you're using [vim-plug](https://github.com/junegunn/vim-plug), add this to
|
||||||
your `init.vim` or `.vimrc`: >
|
your `init.vim` or `.vimrc`: >
|
||||||
|
|
||||||
Plug 'neoclide/coc.nvim', {'branch': 'release'}
|
Plug 'neoclide/coc.nvim'
|
||||||
|
|
||||||
And run: >
|
And run: >
|
||||||
|
|
||||||
|
@ -155,7 +161,7 @@ Built-in configurations:~
|
||||||
"suggest.detailField":~
|
"suggest.detailField":~
|
||||||
|
|
||||||
Where to add the detail in complete item when it's less than max
|
Where to add the detail in complete item when it's less than max
|
||||||
length, default: `"menu"`
|
length, default: `"preview"` when floating documentation is enabled.
|
||||||
|
|
||||||
Valid options: ["abbr", "menu", "preview"]
|
Valid options: ["abbr", "menu", "preview"]
|
||||||
|
|
||||||
|
@ -294,6 +300,7 @@ Built-in configurations:~
|
||||||
"variable": "\ue79b",
|
"variable": "\ue79b",
|
||||||
"value": "\uf89f",
|
"value": "\uf89f",
|
||||||
"operator": "\u03a8",
|
"operator": "\u03a8",
|
||||||
|
"constructor": "\uf0ad",
|
||||||
"function": "\u0192",
|
"function": "\u0192",
|
||||||
"reference": "\ufa46",
|
"reference": "\ufa46",
|
||||||
"constant": "\uf8fe",
|
"constant": "\uf8fe",
|
||||||
|
@ -382,10 +389,6 @@ Built-in configurations:~
|
||||||
|
|
||||||
Refresh diagnostics when in insert mode, default: `false`
|
Refresh diagnostics when in insert mode, default: `false`
|
||||||
|
|
||||||
"diagnostic.refreshAfterSave":~
|
|
||||||
|
|
||||||
Refresh diagnostics after file save only, default: `false`
|
|
||||||
|
|
||||||
"diagnostic.displayByAle":~
|
"diagnostic.displayByAle":~
|
||||||
|
|
||||||
Use ALE for displaying diagnostics. This will disable coc.nvim for
|
Use ALE for displaying diagnostics. This will disable coc.nvim for
|
||||||
|
@ -418,9 +421,9 @@ Built-in configurations:~
|
||||||
|
|
||||||
Offset number of buffer.addHighlight, Neovim only, default: `1000`
|
Offset number of buffer.addHighlight, Neovim only, default: `1000`
|
||||||
|
|
||||||
"diagnostic.signOffset":~
|
"diagnostic.signPriority":~
|
||||||
|
|
||||||
Offset number of sign, default: `1000`
|
Priority of diagnostic sign, default to `10`, check |sign-priority|.
|
||||||
|
|
||||||
"diagnostic.errorSign":~
|
"diagnostic.errorSign":~
|
||||||
|
|
||||||
|
@ -470,7 +473,7 @@ Built-in configurations:~
|
||||||
|
|
||||||
"signature.triggerSignatureWait":~
|
"signature.triggerSignatureWait":~
|
||||||
|
|
||||||
Delay for signature request trigger (milliseconds), default: `50`.
|
Timeout for signature request trigger (milliseconds), default: `500`.
|
||||||
Change to higher value for slow Language Servers.
|
Change to higher value for slow Language Servers.
|
||||||
|
|
||||||
"signature.target":~
|
"signature.target":~
|
||||||
|
@ -494,6 +497,11 @@ Built-in configurations:~
|
||||||
Maximum height of floating window with the signature help, default: `8`
|
Maximum height of floating window with the signature help, default: `8`
|
||||||
|
|
||||||
*coc-config-refactor*
|
*coc-config-refactor*
|
||||||
|
"refactor.saveToFile":~
|
||||||
|
|
||||||
|
Save to file when write refactor buffer with ':noa wa' command, set to
|
||||||
|
false if you want save buffer by yourself.
|
||||||
|
|
||||||
"refactor.openCommand":~
|
"refactor.openCommand":~
|
||||||
|
|
||||||
Open command for refactor window, default: `vsplit`
|
Open command for refactor window, default: `vsplit`
|
||||||
|
@ -506,15 +514,72 @@ Built-in configurations:~
|
||||||
|
|
||||||
Print num lines of trailing context after each match, default: `3`
|
Print num lines of trailing context after each match, default: `3`
|
||||||
|
|
||||||
|
*coc-config-dialog*
|
||||||
|
"dialog.maxWidth": ~
|
||||||
|
|
||||||
|
Maximum width of dialog window.
|
||||||
|
|
||||||
|
"dialog.maxHeight": ~
|
||||||
|
|
||||||
|
Maximum height of dialog window.
|
||||||
|
|
||||||
|
"dialog.confirmKey":~
|
||||||
|
|
||||||
|
Confirm key for confirm selection used by menu and picker, you can
|
||||||
|
always use <esc> to cancel, default to `<cr>`.
|
||||||
|
|
||||||
|
"dialog.pickerButtons":~
|
||||||
|
|
||||||
|
Show buttons for picker dialog window/popup, default `true`.
|
||||||
|
|
||||||
|
"dialog.pickerButtonShortcut":~
|
||||||
|
|
||||||
|
Show shortcut in buttons of picker dialog window/popup, used when
|
||||||
|
dialog.pickerButtons is true, default `true`.
|
||||||
|
|
||||||
|
"dialog.floatHighlight":~
|
||||||
|
|
||||||
|
Highlight group for dialog window/popup, default to 'CocFloating'.
|
||||||
|
|
||||||
|
"dialog.floatBorderHighlight":~
|
||||||
|
|
||||||
|
Highlight group for border of dialog window/popup, default to
|
||||||
|
'CocFloating'.
|
||||||
|
|
||||||
|
*coc-config-notification*
|
||||||
|
"notification.marginTop": ~
|
||||||
|
|
||||||
|
Margin top for notification dialog, default to `1`.
|
||||||
|
|
||||||
|
"notification.marginRight": ~
|
||||||
|
|
||||||
|
Margin right for notification dialog, default to `1`.
|
||||||
|
|
||||||
|
"notification.maxWidth": ~
|
||||||
|
|
||||||
|
Maximum content width of notification dialog, default to `60`.
|
||||||
|
|
||||||
|
"notification.maxHeight": ~
|
||||||
|
|
||||||
|
Maximum content height of notification dialog, default to `10`.
|
||||||
|
|
||||||
|
"notification.highlightGroup": ~
|
||||||
|
|
||||||
|
Highlight group of notification dialog, default to `CocFloating`.
|
||||||
|
|
||||||
|
"notification.minProgressWidth": ~
|
||||||
|
|
||||||
|
Minimum width of progress notification, default to `30`.
|
||||||
|
|
||||||
*coc-config-codelens*
|
*coc-config-codelens*
|
||||||
"codeLens.enable":~
|
"codeLens.enable":~
|
||||||
|
|
||||||
Enable `codeLens` feature. Requires Neovim with virtual text feature,
|
Enable `codeLens` feature. Requires Neovim with virtual text feature,
|
||||||
default: `false`
|
default: `false`.
|
||||||
|
|
||||||
"codeLens.separator":~
|
"codeLens.separator":~
|
||||||
|
|
||||||
Separator text for `codeLens` in virtual text, default: `"‣"`
|
Separator text for `codeLens` in virtual text, default: `"‣"`.
|
||||||
|
|
||||||
"codeLens.subseparator":~
|
"codeLens.subseparator":~
|
||||||
|
|
||||||
|
@ -527,11 +592,25 @@ Built-in configurations:~
|
||||||
|
|
||||||
Note: This is the filetype after mapping by `g:coc_filetype_map`.
|
Note: This is the filetype after mapping by `g:coc_filetype_map`.
|
||||||
|
|
||||||
|
"workspace.bottomUpFiletypes":~
|
||||||
|
|
||||||
|
Filetypes that should have workspace folder should resolved from
|
||||||
|
base directory of file.
|
||||||
|
|
||||||
|
"workspace.workspaceFolderCheckCwd":~
|
||||||
|
|
||||||
|
Whether the cwd directory should be checked first when resolving
|
||||||
|
workspace folder of current buffer.
|
||||||
|
|
||||||
*coc-config-list*
|
*coc-config-list*
|
||||||
"list.indicator":~
|
"list.indicator":~
|
||||||
|
|
||||||
The character used as first character in prompt line, default: `">"`
|
The character used as first character in prompt line, default: `">"`
|
||||||
|
|
||||||
|
"list.alignColumns":~
|
||||||
|
|
||||||
|
Whether to align lists in columns, default: `false`
|
||||||
|
|
||||||
"list.height":~
|
"list.height":~
|
||||||
|
|
||||||
Height of split list window, default: `10`
|
Height of split list window, default: `10`
|
||||||
|
@ -552,6 +631,11 @@ Built-in configurations:~
|
||||||
|
|
||||||
Max height for preview window of list, default: `12`
|
Max height for preview window of list, default: `12`
|
||||||
|
|
||||||
|
"list.matchHighlightGroup":~
|
||||||
|
|
||||||
|
Highlight group used for matched texts in list window.
|
||||||
|
default: `"Search"`
|
||||||
|
|
||||||
"list.previewHighlightGroup":~
|
"list.previewHighlightGroup":~
|
||||||
|
|
||||||
Highlight group used for highlighting the range in preview window,
|
Highlight group used for highlighting the range in preview window,
|
||||||
|
@ -588,7 +672,7 @@ Built-in configurations:~
|
||||||
|
|
||||||
"list.source.symbols.excludes":~
|
"list.source.symbols.excludes":~
|
||||||
|
|
||||||
Patterns of mimimatch for filepath to execlude from symbols list,
|
Patterns of minimatch for filepath to execlude from symbols list,
|
||||||
default: `[]`
|
default: `[]`
|
||||||
|
|
||||||
"list.source.outline.ctagsFilestypes":~
|
"list.source.outline.ctagsFilestypes":~
|
||||||
|
@ -596,7 +680,26 @@ Built-in configurations:~
|
||||||
Filetypes that should use `ctags` for outline instead of language server,
|
Filetypes that should use `ctags` for outline instead of language server,
|
||||||
default: `[]`
|
default: `[]`
|
||||||
|
|
||||||
|
|
||||||
|
"list.source.diagnostics.pathFormat":~
|
||||||
|
|
||||||
|
Decide how the filepath is shown in the list.
|
||||||
|
|
||||||
|
Valid options: ["full", "short", "filename", "hidden"].
|
||||||
|
|
||||||
|
default: `"full"`
|
||||||
|
|
||||||
|
"list.source.diagnostics.includeCode":~
|
||||||
|
|
||||||
|
Whether to show the diagnostic code in the list.
|
||||||
|
|
||||||
|
default: `true`
|
||||||
|
|
||||||
*coc-config-preferences*
|
*coc-config-preferences*
|
||||||
|
"coc.preferences.enableMessageDialog"~
|
||||||
|
|
||||||
|
Enable messages shown in notification dialog, default: `false`
|
||||||
|
|
||||||
"coc.preferences.maxFileSize":~
|
"coc.preferences.maxFileSize":~
|
||||||
|
|
||||||
Maximum file size in bytes that coc.nvim should handle, default: `'10MB'`
|
Maximum file size in bytes that coc.nvim should handle, default: `'10MB'`
|
||||||
|
@ -647,11 +750,6 @@ Built-in configurations:~
|
||||||
Automatically update the value of `b:coc_current_function` on `CursorHold`
|
Automatically update the value of `b:coc_current_function` on `CursorHold`
|
||||||
event, default: `false`
|
event, default: `false`
|
||||||
|
|
||||||
"coc.preferences.formatOnInsertLeave":~
|
|
||||||
|
|
||||||
Trigger format on type when insert leave by send \n to the server.
|
|
||||||
Default: `false`
|
|
||||||
|
|
||||||
"coc.preferences.formatOnSaveFiletypes":~
|
"coc.preferences.formatOnSaveFiletypes":~
|
||||||
|
|
||||||
Filetypes for which formatting triggers after saving, default: `[]`
|
Filetypes for which formatting triggers after saving, default: `[]`
|
||||||
|
@ -693,7 +791,8 @@ Built-in configurations:~
|
||||||
"coc.preferences.bracketEnterImprove":~
|
"coc.preferences.bracketEnterImprove":~
|
||||||
|
|
||||||
Improve handling of pressing enter inside brackets (`<> {} [] ()`) by
|
Improve handling of pressing enter inside brackets (`<> {} [] ()`) by
|
||||||
adding a new empty line below and moving the cursor to it.
|
create a new empty line in the middle, the indent is calculated by vim,
|
||||||
|
checkout |indentexpr| for details.
|
||||||
|
|
||||||
Works with |coc#on_enter()|, default: `true`
|
Works with |coc#on_enter()|, default: `true`
|
||||||
|
|
||||||
|
@ -724,8 +823,7 @@ Built-in configurations:~
|
||||||
|
|
||||||
"coc.preferences.promptInput":~
|
"coc.preferences.promptInput":~
|
||||||
|
|
||||||
Use prompt buffer in float window for user input, works on latest
|
Use prompt buffer in float window for user input.
|
||||||
neovim >= 0.4.3 only.
|
|
||||||
Default: `true`
|
Default: `true`
|
||||||
|
|
||||||
"coc.preferences.enableMarkdown":~
|
"coc.preferences.enableMarkdown":~
|
||||||
|
@ -781,7 +879,7 @@ Built-in configurations:~
|
||||||
- "env": Environment variables for child process.
|
- "env": Environment variables for child process.
|
||||||
|
|
||||||
- "settings": Settings for languageserver, received on server
|
- "settings": Settings for languageserver, received on server
|
||||||
initialiation.
|
initialization.
|
||||||
|
|
||||||
- "trace.server": Trace level of communication between server and
|
- "trace.server": Trace level of communication between server and
|
||||||
client that showed with output channel.
|
client that showed with output channel.
|
||||||
|
@ -1026,12 +1124,17 @@ normal mode, `v_` works for visual mode.
|
||||||
|
|
||||||
<Plug>(coc-codeaction) *n_coc-codeaction*
|
<Plug>(coc-codeaction) *n_coc-codeaction*
|
||||||
|
|
||||||
Get and run code action(s) for current file.
|
Get and run code action(s) for current file, use |coc-codeaction-cursor|
|
||||||
|
for same beharior as VSCode.
|
||||||
|
|
||||||
<Plug>(coc-codeaction-line) *n_coc-codeaction-line*
|
<Plug>(coc-codeaction-line) *n_coc-codeaction-line*
|
||||||
|
|
||||||
Get and run code action(s) for current line.
|
Get and run code action(s) for current line.
|
||||||
|
|
||||||
|
<Plug>(coc-codeaction-cursor) *n_coc-codeaction-cursor*
|
||||||
|
|
||||||
|
Get and run code action(s) using empty range at current cursor.
|
||||||
|
|
||||||
<Plug>(coc-codeaction-selected) *n_coc-codeaction-selected*
|
<Plug>(coc-codeaction-selected) *n_coc-codeaction-selected*
|
||||||
*v_coc-codeaction-selected*
|
*v_coc-codeaction-selected*
|
||||||
|
|
||||||
|
@ -1179,6 +1282,11 @@ b:coc_current_function *b:coc_current_function*
|
||||||
Set `"coc.preferences.currentFunctionSymbolAutoUpdate": true`
|
Set `"coc.preferences.currentFunctionSymbolAutoUpdate": true`
|
||||||
in coc-settings.json to update it on CursorHold.
|
in coc-settings.json to update it on CursorHold.
|
||||||
|
|
||||||
|
b:coc_cursors_activated *b:coc_cursors_activated*
|
||||||
|
|
||||||
|
Use expression `get(b:, 'coc_cursors_activated',0)` to check if
|
||||||
|
cursors session is activated for current buffer.
|
||||||
|
|
||||||
g:coc_disable_startup_warning *g:coc_disable_startup_warning*
|
g:coc_disable_startup_warning *g:coc_disable_startup_warning*
|
||||||
|
|
||||||
Disable possible warning on startup for old vim/node version.
|
Disable possible warning on startup for old vim/node version.
|
||||||
|
@ -1220,7 +1328,6 @@ g:coc_start_at_startup *g:coc_start_at_startup*
|
||||||
|
|
||||||
g:coc_user_config *g:coc_user_config*
|
g:coc_user_config *g:coc_user_config*
|
||||||
|
|
||||||
|
|
||||||
User configuration object, define this variable when you can't use
|
User configuration object, define this variable when you can't use
|
||||||
|coc#config()|
|
|coc#config()|
|
||||||
|
|
||||||
|
@ -1309,14 +1416,6 @@ g:coc_node_path *g:coc_node_path*
|
||||||
|
|
||||||
Note: you can use `~` as home directory.
|
Note: you can use `~` as home directory.
|
||||||
|
|
||||||
g:coc_force_bundle *g:coc_force_bundle*
|
|
||||||
|
|
||||||
When lib folder with javascript code exists, coc.nvim would use
|
|
||||||
compiled javascript from lib folder, set this variable to `1` if you
|
|
||||||
want it use `build/index.js` created by webpack.
|
|
||||||
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
g:coc_node_args *g:coc_node_args*
|
g:coc_node_args *g:coc_node_args*
|
||||||
|
|
||||||
Arguments passed to node when starting coc service from source code.
|
Arguments passed to node when starting coc service from source code.
|
||||||
|
@ -1357,11 +1456,6 @@ g:coc_status_warning_sign *g:coc_status_warning_sign*
|
||||||
|
|
||||||
Warning character used for statusline, default: `W`
|
Warning character used for statusline, default: `W`
|
||||||
|
|
||||||
g:coc_watch_extensions *g:coc_watch_extensions*
|
|
||||||
|
|
||||||
Extensions to watch for reload, used for developing extensions only,
|
|
||||||
need watchman installed.
|
|
||||||
|
|
||||||
g:coc_quickfix_open_command *g:coc_quickfix_open_command*
|
g:coc_quickfix_open_command *g:coc_quickfix_open_command*
|
||||||
|
|
||||||
Command used for open quickfix list. To jump fist position after
|
Command used for open quickfix list. To jump fist position after
|
||||||
|
@ -1387,11 +1481,6 @@ g:node_client_debug *g:node_client_debug*
|
||||||
|
|
||||||
Default: `0`
|
Default: `0`
|
||||||
|
|
||||||
g:coc_cursors_activated *g:coc_cursors_activated*
|
|
||||||
|
|
||||||
Use expression `get(g:, 'coc_cursors_activated',0)` to check if
|
|
||||||
cursors session is activated.
|
|
||||||
|
|
||||||
g:coc_config_home *g:coc_config_home*
|
g:coc_config_home *g:coc_config_home*
|
||||||
|
|
||||||
Configure the directory which will be used to look for
|
Configure the directory which will be used to look for
|
||||||
|
@ -1424,12 +1513,33 @@ g:coc_borderchars *g:coc_borderchars*
|
||||||
Border characters used by border window, default to:
|
Border characters used by border window, default to:
|
||||||
>
|
>
|
||||||
['─', '│', '─', '│', '┌', '┐', '┘', '└']
|
['─', '│', '─', '│', '┌', '┐', '┘', '└']
|
||||||
|
<
|
||||||
|
Note: you may need special font like Nerd font to show them.
|
||||||
|
|
||||||
|
g:coc_border_joinchars *g:coc_border_joinchars*
|
||||||
|
|
||||||
|
Border join characters used by float window/popup, default to:
|
||||||
|
>
|
||||||
|
['┬', '┤', '┴', '├']
|
||||||
|
<
|
||||||
|
Note: you may need special font like Nerd font to show them.
|
||||||
|
|
||||||
g:coc_prompt_win_width *g:coc_prompt_win_width*
|
g:coc_prompt_win_width *g:coc_prompt_win_width*
|
||||||
|
|
||||||
Width of input prompt window on neovim >= 0.5.0. Prompt buffer can't
|
Width of input prompt window on neovim >= 0.5.0. Prompt buffer can't
|
||||||
work with vim8's popup yet.
|
work with vim8's popup yet.
|
||||||
|
|
||||||
|
g:coc_markdown_disabled_languages *g:coc_markdown_disabled_languages*
|
||||||
|
|
||||||
|
Filetype list that should be disabled for highlight in markdown block, ex: >
|
||||||
|
|
||||||
|
let g:coc_markdown_disabled_languages = ['html']
|
||||||
|
>
|
||||||
|
|
||||||
|
g:coc_install_yarn_cmd *g:coc_install_yarn_cmd*
|
||||||
|
|
||||||
|
Yarn command used for |coc#util#install()| function.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
Some variables are provided by coc.nvim so you can use them in your
|
Some variables are provided by coc.nvim so you can use them in your
|
||||||
|
@ -1574,6 +1684,10 @@ health#coc#check() *health#coc#check()*
|
||||||
Neovim only, run health check, triggered by ':checkhealth'
|
Neovim only, run health check, triggered by ':checkhealth'
|
||||||
command.
|
command.
|
||||||
|
|
||||||
|
coc#util#api_version() *coc#util#api_version()*
|
||||||
|
|
||||||
|
Get coc.nvim's vim api version number, start from `1`.
|
||||||
|
|
||||||
coc#util#job_command() *coc#util#job_command()*
|
coc#util#job_command() *coc#util#job_command()*
|
||||||
|
|
||||||
Get the job command used for starting the coc service.
|
Get the job command used for starting the coc service.
|
||||||
|
@ -1594,10 +1708,6 @@ coc#util#rebuild() *coc#util#rebuild()*
|
||||||
|
|
||||||
Rebuild coc extensions.
|
Rebuild coc extensions.
|
||||||
|
|
||||||
coc#util#float_scroll({forward}) *coc#util#float_scroll()*
|
|
||||||
|
|
||||||
Deprecated, please use |coc#float#scroll|.
|
|
||||||
|
|
||||||
coc#util#root_patterns() *coc#util#root_patterns()*
|
coc#util#root_patterns() *coc#util#root_patterns()*
|
||||||
|
|
||||||
Get root patterns used for current document.
|
Get root patterns used for current document.
|
||||||
|
@ -1612,6 +1722,11 @@ coc#util#get_config({key}) *coc#util#get_config()*
|
||||||
|
|
||||||
:echo coc#util#get_config('coc.preferences')
|
:echo coc#util#get_config('coc.preferences')
|
||||||
|
|
||||||
|
coc#util#install() *coc#util#install()*
|
||||||
|
|
||||||
|
Install dependencies and compile source code, not needed unless
|
||||||
|
you need compile typescript code.
|
||||||
|
|
||||||
coc#float#close_all() *coc#float#close_all()*
|
coc#float#close_all() *coc#float#close_all()*
|
||||||
|
|
||||||
Close all float windows/popups.
|
Close all float windows/popups.
|
||||||
|
@ -1628,20 +1743,23 @@ coc#float#has_scroll() *coc#float#has_scroll()*
|
||||||
Return `1` when there is scrollable float window or popup.
|
Return `1` when there is scrollable float window or popup.
|
||||||
Example key-mappings:
|
Example key-mappings:
|
||||||
>
|
>
|
||||||
if has('nvim-0.4.3') || has('patch-8.2.0750')
|
if has('nvim-0.4.0') || has('patch-8.2.0750')
|
||||||
nnoremap <nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||||
nnoremap <nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||||
inoremap <nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
||||||
inoremap <nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
||||||
|
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||||
|
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||||
endif
|
endif
|
||||||
<
|
<
|
||||||
coc#float#scroll({forward}, [{amount}])
|
coc#float#scroll({forward}, [{amount}]) *coc#float#scroll()*
|
||||||
|
|
||||||
Scroll all scrollable float windows/popups, scroll backward when
|
Scroll all scrollable float windows/popups, scroll backward when
|
||||||
{forward} is not `1`. {amount} could be number or full page when
|
{forward} is not `1`. {amount} could be number or full page when
|
||||||
omitted.
|
omitted.
|
||||||
|
|
||||||
Note: this function requires nvim >= 0.4.3 or vim >= 8.2.750 to work.
|
Note: this function requires nvim >= 0.4.0 or vim >= 8.2.750 to work.
|
||||||
|
|
||||||
|
|
||||||
CocRequest({id}, {method}, [{params}]) *CocRequest()*
|
CocRequest({id}, {method}, [{params}]) *CocRequest()*
|
||||||
|
|
||||||
|
@ -1730,8 +1848,13 @@ CocHasProvider({feature}) *CocHasProvider()*
|
||||||
CocTagFunc({pattern}, {flags}, {info}) *CocTagFunc()*
|
CocTagFunc({pattern}, {flags}, {info}) *CocTagFunc()*
|
||||||
|
|
||||||
Used for vim's 'tagfunc' option, to make tag search by |CTRL-]| use
|
Used for vim's 'tagfunc' option, to make tag search by |CTRL-]| use
|
||||||
coc.nvim as provider.
|
coc.nvim as provider, tag search would be performed when no result
|
||||||
|
from coc.nvim.
|
||||||
|
|
||||||
|
Make sure your vim support 'tagfunc' by
|
||||||
|
>
|
||||||
|
:echo exists('&tagfunc')
|
||||||
|
<
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
*coc-action*
|
*coc-action*
|
||||||
Available Actions ~
|
Available Actions ~
|
||||||
|
@ -1819,9 +1942,6 @@ Acceptable {action} names for |CocAction()| and |CocActionAsync|.
|
||||||
defaults to `coc.preferences.hoverTarget` in `coc-settings.json`.
|
defaults to `coc.preferences.hoverTarget` in `coc-settings.json`.
|
||||||
Valid options: ["preview", "echo", "float"]
|
Valid options: ["preview", "echo", "float"]
|
||||||
|
|
||||||
Note: the behavior would change in Neovim, where floating windows are
|
|
||||||
available.
|
|
||||||
|
|
||||||
"getHover" *coc-action-getHover*
|
"getHover" *coc-action-getHover*
|
||||||
|
|
||||||
Get documentation text array on current position, returns array of
|
Get documentation text array on current position, returns array of
|
||||||
|
@ -1839,9 +1959,24 @@ Acceptable {action} names for |CocAction()| and |CocActionAsync|.
|
||||||
|
|
||||||
Return the function string that current cursor in.
|
Return the function string that current cursor in.
|
||||||
|
|
||||||
"documentSymbols" *coc-action-documentSymbols*
|
"documentSymbols" [{bufnr}] *coc-action-documentSymbols*
|
||||||
|
|
||||||
Get a list of symbols in the current document.
|
Get a list of symbols of current buffer or specific {bufnr}.
|
||||||
|
|
||||||
|
"ensureDocument" *coc-action-ensureDocument*
|
||||||
|
|
||||||
|
Ensure current document is attached to coc.nvim, should be used when
|
||||||
|
you need invoke action of current document just after document
|
||||||
|
created.
|
||||||
|
|
||||||
|
Return `v:false` when the document can't be attached, the document
|
||||||
|
won't be attached for one of these reasons:
|
||||||
|
|
||||||
|
1. The 'buftype' option is neither <empty> nor acwrite.
|
||||||
|
2. Buffer variable `b:coc_enabled` is set to `0`.
|
||||||
|
3. Size of buffer bigger than `coc.preferences.maxFileSize`
|
||||||
|
configuration.
|
||||||
|
4. The buffer is used for command line window.
|
||||||
|
|
||||||
"rename" *coc-action-rename*
|
"rename" *coc-action-rename*
|
||||||
|
|
||||||
|
@ -1880,8 +2015,8 @@ Acceptable {action} names for |CocAction()| and |CocActionAsync|.
|
||||||
|
|
||||||
Prompt for a code action and do it.
|
Prompt for a code action and do it.
|
||||||
|
|
||||||
{mode} should be result of visualmode(), when used in visualmode,
|
{mode} could be `line` or `cursor` or result of |visualmode()|,
|
||||||
could be empty string or v:null for none visualmode.
|
current buffer range is used when it's empty string.
|
||||||
|
|
||||||
{only} can be title of a codeAction or list of CodeActionKind.
|
{only} can be title of a codeAction or list of CodeActionKind.
|
||||||
|
|
||||||
|
@ -2138,7 +2273,9 @@ COMMANDS *coc-commands*
|
||||||
Note: the log would be cleared when coc.nvim started.
|
Note: the log would be cleared when coc.nvim started.
|
||||||
|
|
||||||
Use environment variable `NVIM_COC_LOG_LEVEL` to change log level
|
Use environment variable `NVIM_COC_LOG_LEVEL` to change log level
|
||||||
(default 'info'). Use shell command: >
|
(default 'info', could be 'all', 'trace', 'debug', 'info',
|
||||||
|
'warn', 'error', 'off').
|
||||||
|
Use shell command: >
|
||||||
|
|
||||||
export NVIM_COC_LOG_LEVEL=debug
|
export NVIM_COC_LOG_LEVEL=debug
|
||||||
<
|
<
|
||||||
|
@ -2210,6 +2347,11 @@ COMMANDS *coc-commands*
|
||||||
related files. You can make any kind of changes, including add lines
|
related files. You can make any kind of changes, including add lines
|
||||||
and remove lines.
|
and remove lines.
|
||||||
|
|
||||||
|
:CocWatch [extension] *:CocWatch*
|
||||||
|
|
||||||
|
Watch loaded [extension] for reload on file change, use <tab> for
|
||||||
|
complete extension id.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
AUTOCMD *coc-autocmds*
|
AUTOCMD *coc-autocmds*
|
||||||
|
|
||||||
|
@ -2287,6 +2429,42 @@ Note: highlight commands should appear after the |:colorscheme| command or use
|
||||||
|ColorScheme| autocmd to make sure customized highlight works after color
|
|ColorScheme| autocmd to make sure customized highlight works after color
|
||||||
scheme change.
|
scheme change.
|
||||||
|
|
||||||
|
CocUnderline *CocUnderline*
|
||||||
|
|
||||||
|
Default: `hi default CocUnderline cterm=underline gui=underline`
|
||||||
|
|
||||||
|
The highlight for underlined text.
|
||||||
|
|
||||||
|
CocBold *CocBold*
|
||||||
|
|
||||||
|
Default: `hi default CocBold term=bold cterm=bold gui=bold`
|
||||||
|
|
||||||
|
The highlight for bold text.
|
||||||
|
|
||||||
|
CocItalic *CocItalic*
|
||||||
|
|
||||||
|
Default: `hi default CocItalic term=italic cterm=italic gui=italic`
|
||||||
|
|
||||||
|
The highlight for italic text.
|
||||||
|
|
||||||
|
CocMarkdownCode *CocMarkdownCode*
|
||||||
|
|
||||||
|
Default: `hi default link CocMarkdownCode markdownCode`
|
||||||
|
|
||||||
|
The highlight for markdown code in floating window/popup.
|
||||||
|
|
||||||
|
CocMarkdownHeader *CocMarkdownHeader*
|
||||||
|
|
||||||
|
Default: `hi default link CocMarkdownHeader markdownH1`
|
||||||
|
|
||||||
|
The highlight for markdown header in floating window/popup.
|
||||||
|
|
||||||
|
CocMarkdownLink *CocMarkdownLink*
|
||||||
|
|
||||||
|
Default: `hi default CocMarkdownLink ctermfg=Blue guifg=#15aabf guibg=NONE`
|
||||||
|
|
||||||
|
The highlight for markdown link text in floating window/popup.
|
||||||
|
|
||||||
CocErrorSign *CocErrorSign*
|
CocErrorSign *CocErrorSign*
|
||||||
|
|
||||||
Default: `hi CocErrorSign ctermfg=Red guifg=#ff0000`
|
Default: `hi CocErrorSign ctermfg=Red guifg=#ff0000`
|
||||||
|
@ -2454,7 +2632,9 @@ CocMenuSel *CocMenuSel*
|
||||||
|
|
||||||
Default: `hi default link CocMenuSel PmenuSel`
|
Default: `hi default link CocMenuSel PmenuSel`
|
||||||
|
|
||||||
The highlight used for selected menu item, works on neovim only.
|
The highlight used for current menu item in menu dialog,
|
||||||
|
works on neovim only since vim doesn't support change highlight
|
||||||
|
group of cursorline inside popup.
|
||||||
|
|
||||||
CocListMode *CocListMode*
|
CocListMode *CocListMode*
|
||||||
|
|
||||||
|
@ -2516,6 +2696,10 @@ LIST COMMAND *coc-list-command*
|
||||||
|
|
||||||
Reopen last opened list, input and cursor position will be preserved.
|
Reopen last opened list, input and cursor position will be preserved.
|
||||||
|
|
||||||
|
:CocListCancel *:CocListCancel*
|
||||||
|
|
||||||
|
Close list, useful when the list is not the current window.
|
||||||
|
|
||||||
:CocPrev [{name}] *:CocPrev*
|
:CocPrev [{name}] *:CocPrev*
|
||||||
|
|
||||||
Invoke default action for the previous item in the last {name} list.
|
Invoke default action for the previous item in the last {name} list.
|
||||||
|
@ -2649,6 +2833,7 @@ LIST MAPPINGS *coc-list-mappings*
|
||||||
Default mappings on insert mode:
|
Default mappings on insert mode:
|
||||||
|
|
||||||
<Esc> - cancel list session.
|
<Esc> - cancel list session.
|
||||||
|
<CR> - do default action with selected items or current item.
|
||||||
<C-c> - stop loading task.
|
<C-c> - stop loading task.
|
||||||
<C-v> - paste text from system clipboard.
|
<C-v> - paste text from system clipboard.
|
||||||
<C-l> - reload list.
|
<C-l> - reload list.
|
||||||
|
@ -2676,6 +2861,7 @@ Default mappings on insert mode:
|
||||||
Default mappings on normal mode:
|
Default mappings on normal mode:
|
||||||
|
|
||||||
<Esc> - cancel list session.
|
<Esc> - cancel list session.
|
||||||
|
<CR> - do default action with selected items or current item.
|
||||||
<C-c> - stop source from fetching more items.
|
<C-c> - stop source from fetching more items.
|
||||||
<C-l> - reload list.
|
<C-l> - reload list.
|
||||||
<C-a> - mark all visible items selected.
|
<C-a> - mark all visible items selected.
|
||||||
|
@ -2733,8 +2919,9 @@ The mapping expression should be `command:arguments`, available commands:
|
||||||
'togglemode' - toggle between insert and normal mode.
|
'togglemode' - toggle between insert and normal mode.
|
||||||
'previous' - move cursor to previous item.
|
'previous' - move cursor to previous item.
|
||||||
'next' - move cursor to next item.
|
'next' - move cursor to next item.
|
||||||
'defaultaction' - execute default action.
|
'defaultaction' - do default action for selected items or current item.
|
||||||
'jumpback' - stop prompt and jump back to original window.
|
'jumpback' - stop prompt and jump back to original window.
|
||||||
|
'previewtoggle' - toggle preview window, requires preview action exists.
|
||||||
'previewup' - scroll preview window up.
|
'previewup' - scroll preview window up.
|
||||||
'previewdown' - scroll preview window down.
|
'previewdown' - scroll preview window down.
|
||||||
'help' - show help.
|
'help' - show help.
|
||||||
|
@ -2885,6 +3072,105 @@ lists *coc-list-lists*
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
DIALOG SUPPORT *coc-dialog*
|
||||||
|
|
||||||
|
Dialog is special float window/popup that could response to user actions,
|
||||||
|
dialog have close button, border, title (optional), bottom buttons(optional).
|
||||||
|
|
||||||
|
Note bottom buttons work different on neovim and vim, on neovim you can
|
||||||
|
click the button since neovim allows focus of window, on vim you have to type
|
||||||
|
highlighted character to trigger button callback.
|
||||||
|
|
||||||
|
Note dialog feature requires neovim >= 0.4.0 or vim >= 8.2.0750 to work.
|
||||||
|
|
||||||
|
See |coc-config-dialog| for available configurations.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*coc-dialog-basic*
|
||||||
|
|
||||||
|
A basic dialog is create by 'window.showDialog' api, which is just some texts
|
||||||
|
with optional buttons.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*coc-dialog-confirm*
|
||||||
|
|
||||||
|
A confirm dialog is used for user to confirm an action, normally created by
|
||||||
|
`window.showPrompt()` Confirm dialog uses filter feature on vim8 and
|
||||||
|
|getchar()| on neoivm.
|
||||||
|
|
||||||
|
The difference is you can operate vim on vim8, but not on neovim.
|
||||||
|
|
||||||
|
Supported key-mappings:
|
||||||
|
|
||||||
|
<C-c> - force cancel, return -1 for callback.
|
||||||
|
<esc>, n, N - reject the action, return 0 for callback.
|
||||||
|
y,Y - accept the action, return 1 for callback.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*coc-dialog-input*
|
||||||
|
|
||||||
|
A input dialog request user input with optional default value, normally
|
||||||
|
created by `window.requestInput`, when `"coc.preferences.promptInput"` is
|
||||||
|
false, vim's commandline input prompt is used instead.
|
||||||
|
|
||||||
|
Supported key-mappings:
|
||||||
|
|
||||||
|
<C-a> - move cursor to first col.
|
||||||
|
<C-e> - move cursor to last col.
|
||||||
|
<esc> - cancel input, an empty string is received by callback.
|
||||||
|
<cr> - confirm current input.
|
||||||
|
|
||||||
|
And other insert mode key-mappings that your neovim provided.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*coc-dialog-menu*
|
||||||
|
|
||||||
|
A menu dialog is shown aside current cursor position for pick a single item
|
||||||
|
from list of items, |coc-codeaction| uses menu dialog by default when it's
|
||||||
|
supported, extensions could use `window.showMenuPicker` to create menu
|
||||||
|
dialog.
|
||||||
|
|
||||||
|
Supported key-mappings:
|
||||||
|
|
||||||
|
<Esc> <C-c> - cancel selection.
|
||||||
|
<cr> - confirm selection of current item.
|
||||||
|
1-9 - select item with 1 based index.
|
||||||
|
g - move to first item.
|
||||||
|
G - move to last item.
|
||||||
|
j <tab> <down> <C-n> - move to next item.
|
||||||
|
k <s-tab> <up> <C-p> - move to previous item.
|
||||||
|
<C-f> - scroll forward.
|
||||||
|
<C-b> - scroll backward.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*coc-dialog-picker*
|
||||||
|
|
||||||
|
A picker dialog is used for multiple selection. On neovim, it's possible to
|
||||||
|
toggle selection by mouse click inside the bracket. Extensions could use
|
||||||
|
`window.showPickerDialog` to create picker dialog.
|
||||||
|
|
||||||
|
Supported key-mappings:
|
||||||
|
|
||||||
|
<Esc> <C-c> - cancel selection.
|
||||||
|
<cr> - confirm selection of selected items.
|
||||||
|
<space> - toggle selection of current item.
|
||||||
|
g - move to first item.
|
||||||
|
G - move to last item.
|
||||||
|
j <tab> <down> <C-n> - move to next item.
|
||||||
|
k <s-tab> <up> <C-p> - move to previous item.
|
||||||
|
<C-f> - scroll forward.
|
||||||
|
<C-b> - scroll backward.
|
||||||
|
|
||||||
|
Note when close button is clicked, the selection is canceled with undefined
|
||||||
|
result (same as <esc>).
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
STATUSLINE SUPPORT *coc-status*
|
STATUSLINE SUPPORT *coc-status*
|
||||||
|
|
||||||
Diagnostics info and other status info contributed by extensions could be
|
Diagnostics info and other status info contributed by extensions could be
|
||||||
|
@ -2961,7 +3247,7 @@ Use configuration like: >
|
||||||
\ },
|
\ },
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
" Use auocmd to force lightline update.
|
" Use autocmd to force lightline update.
|
||||||
autocmd User CocStatusChange,CocDiagnosticChange call lightline#update()
|
autocmd User CocStatusChange,CocDiagnosticChange call lightline#update()
|
||||||
<
|
<
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
@ -2992,7 +3278,7 @@ A: On neovim, coc.nvim uses background neovim instance which load syntax
|
||||||
Q: I don't have float/popup window shown up.
|
Q: I don't have float/popup window shown up.
|
||||||
|
|
||||||
A: For vim8, make sure `echo has('textprop') && has('patch-8.1.1719')`
|
A: For vim8, make sure `echo has('textprop') && has('patch-8.1.1719')`
|
||||||
echo 1. For neovim, you need neovim >= 0.4.3.
|
echo 1. For neovim, you need neovim >= 0.4.0.
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "coc.nvim",
|
"name": "coc.nvim",
|
||||||
"version": "0.0.79",
|
"version": "0.0.80",
|
||||||
"description": "LSP based intellisense engine for neovim & vim8.",
|
"description": "LSP based intellisense engine for neovim & vim8.",
|
||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -25,6 +25,9 @@
|
||||||
"globals": {
|
"globals": {
|
||||||
"__TEST__": true
|
"__TEST__": true
|
||||||
},
|
},
|
||||||
|
"projects": [
|
||||||
|
"<rootDir>"
|
||||||
|
],
|
||||||
"watchman": false,
|
"watchman": false,
|
||||||
"clearMocks": true,
|
"clearMocks": true,
|
||||||
"globalSetup": "./jest.js",
|
"globalSetup": "./jest.js",
|
||||||
|
@ -44,3 +47,4 @@
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,18 +22,9 @@ function! s:checkVersion() abort
|
||||||
echohl None
|
echohl None
|
||||||
sleep 2
|
sleep 2
|
||||||
else
|
else
|
||||||
if has('nvim') && !has('nvim-0.4.3')
|
if !has('nvim-0.4.0') && !has('patch-8.1.1719')
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
echom "coc.nvim works best on neovim >= 0.4.3, consider upgrade your neovim."
|
echom "coc.nvim works best on vim >= 8.1.1719 and neovim >= 0.4.0, consider upgrade your vim."
|
||||||
echom "You can add this to your vimrc to avoid this message:"
|
|
||||||
echom " let g:coc_disable_startup_warning = 1"
|
|
||||||
echom "Note that some features may behave incorrectly."
|
|
||||||
echohl None
|
|
||||||
sleep 2
|
|
||||||
elseif !has('nvim') && !has('patch-8.1.1719')
|
|
||||||
echohl WarningMsg
|
|
||||||
echom "coc.nvim need vim >= 8.1.1719 to support features like popup and text property."
|
|
||||||
echom "Consider upgrade your vim for better experience."
|
|
||||||
echom "You can add this to your vimrc to avoid this message:"
|
echom "You can add this to your vimrc to avoid this message:"
|
||||||
echom " let g:coc_disable_startup_warning = 1"
|
echom " let g:coc_disable_startup_warning = 1"
|
||||||
echom "Note that some features may behave incorrectly."
|
echom "Note that some features may behave incorrectly."
|
||||||
|
@ -66,7 +57,21 @@ function! CocTagFunc(pattern, flags, info) abort
|
||||||
return coc#rpc#request('getTagList', [])
|
return coc#rpc#request('getTagList', [])
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! CocPopupCallback(bufnr, arglist) abort
|
||||||
|
if len(a:arglist) == 2
|
||||||
|
if a:arglist[0] == 'confirm'
|
||||||
|
call coc#rpc#notify('PromptInsert', [a:arglist[1]])
|
||||||
|
elseif a:arglist[0] == 'exit'
|
||||||
|
execute 'silent! bd! '.a:bufnr
|
||||||
|
"call coc#rpc#notify('PromptUpdate', [a:arglist[1]])
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! CocAction(name, ...) abort
|
function! CocAction(name, ...) abort
|
||||||
|
if !get(g:, 'coc_service_initialized', 0)
|
||||||
|
throw 'coc.nvim not ready when invoke CocAction "'.a:name.'"'
|
||||||
|
endif
|
||||||
return coc#rpc#request(a:name, a:000)
|
return coc#rpc#request(a:name, a:000)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -138,6 +143,11 @@ function! s:SearchOptions(...) abort
|
||||||
return join(list, "\n")
|
return join(list, "\n")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:LoadedExtensions(...) abort
|
||||||
|
let list = CocAction('loadedExtensions')
|
||||||
|
return join(list, "\n")
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:InstallOptions(...)abort
|
function! s:InstallOptions(...)abort
|
||||||
let list = ['-terminal', '-sync']
|
let list = ['-terminal', '-sync']
|
||||||
return join(list, "\n")
|
return join(list, "\n")
|
||||||
|
@ -146,7 +156,16 @@ endfunction
|
||||||
function! s:OpenConfig()
|
function! s:OpenConfig()
|
||||||
let home = coc#util#get_config_home()
|
let home = coc#util#get_config_home()
|
||||||
if !isdirectory(home)
|
if !isdirectory(home)
|
||||||
|
echohl MoreMsg
|
||||||
|
echom 'Config directory "'.home.'" not exists, create? (y/n)'
|
||||||
|
echohl None
|
||||||
|
let confirm = nr2char(getchar())
|
||||||
|
redraw!
|
||||||
|
if !(confirm ==? "y" || confirm ==? "\r")
|
||||||
|
return
|
||||||
|
else
|
||||||
call mkdir(home, 'p')
|
call mkdir(home, 'p')
|
||||||
|
end
|
||||||
endif
|
endif
|
||||||
execute 'edit '.home.'/coc-settings.json'
|
execute 'edit '.home.'/coc-settings.json'
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -259,14 +278,15 @@ function! s:Enable(initialize)
|
||||||
autocmd DirChanged * call s:Autocmd('DirChanged', get(v:event, 'cwd', ''))
|
autocmd DirChanged * call s:Autocmd('DirChanged', get(v:event, 'cwd', ''))
|
||||||
autocmd TermOpen * call s:Autocmd('TermOpen', +expand('<abuf>'))
|
autocmd TermOpen * call s:Autocmd('TermOpen', +expand('<abuf>'))
|
||||||
autocmd TermClose * call s:Autocmd('TermClose', +expand('<abuf>'))
|
autocmd TermClose * call s:Autocmd('TermClose', +expand('<abuf>'))
|
||||||
autocmd CursorMoved * call coc#float#nvim_refresh_scrollbar()
|
autocmd CursorMoved * call coc#float#nvim_refresh_scrollbar(win_getid())
|
||||||
autocmd WinEnter * call coc#float#nvim_check_close(win_getid())
|
autocmd WinEnter * call coc#float#nvim_win_enter(win_getid())
|
||||||
autocmd CursorHold * call coc#float#nvim_check_related()
|
|
||||||
if exists('##WinClosed')
|
if exists('##WinClosed')
|
||||||
autocmd WinClosed * call coc#float#nvim_close_related(+expand('<afile>'))
|
autocmd WinClosed * call coc#float#close_related(+expand('<afile>'))
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
autocmd WinLeave * call coc#util#clear_highlights()
|
if has('nvim-0.4.0') || has('patch-8.1.1719')
|
||||||
|
autocmd CursorHold * call coc#float#check_related()
|
||||||
|
endif
|
||||||
autocmd WinLeave * call s:Autocmd('WinLeave', win_getid())
|
autocmd WinLeave * call s:Autocmd('WinLeave', win_getid())
|
||||||
autocmd WinEnter * call s:Autocmd('WinEnter', win_getid())
|
autocmd WinEnter * call s:Autocmd('WinEnter', win_getid())
|
||||||
autocmd BufWinLeave * call s:Autocmd('BufWinLeave', +expand('<abuf>'), bufwinid(+expand('<abuf>')))
|
autocmd BufWinLeave * call s:Autocmd('BufWinLeave', +expand('<abuf>'), bufwinid(+expand('<abuf>')))
|
||||||
|
@ -289,7 +309,7 @@ function! s:Enable(initialize)
|
||||||
autocmd CursorHold * call s:Autocmd('CursorHold', +expand('<abuf>'))
|
autocmd CursorHold * call s:Autocmd('CursorHold', +expand('<abuf>'))
|
||||||
autocmd CursorHoldI * call s:Autocmd('CursorHoldI', +expand('<abuf>'))
|
autocmd CursorHoldI * call s:Autocmd('CursorHoldI', +expand('<abuf>'))
|
||||||
autocmd BufNewFile,BufReadPost * call s:Autocmd('BufCreate', +expand('<abuf>'))
|
autocmd BufNewFile,BufReadPost * call s:Autocmd('BufCreate', +expand('<abuf>'))
|
||||||
autocmd BufUnload * call s:SyncAutocmd('BufUnload', +expand('<abuf>'))
|
autocmd BufUnload * call s:Autocmd('BufUnload', +expand('<abuf>'))
|
||||||
autocmd BufWritePre * call s:SyncAutocmd('BufWritePre', +expand('<abuf>'))
|
autocmd BufWritePre * call s:SyncAutocmd('BufWritePre', +expand('<abuf>'))
|
||||||
autocmd FocusGained * if mode() !~# '^c' | call s:Autocmd('FocusGained') | endif
|
autocmd FocusGained * if mode() !~# '^c' | call s:Autocmd('FocusGained') | endif
|
||||||
autocmd VimResized * call s:Autocmd('VimResized', &columns, &lines)
|
autocmd VimResized * call s:Autocmd('VimResized', &columns, &lines)
|
||||||
|
@ -307,14 +327,18 @@ function! s:Enable(initialize)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:Hi() abort
|
function! s:Hi() abort
|
||||||
|
hi default CocErrorSign ctermfg=Red guifg=#ff0000 guibg=NONE
|
||||||
|
hi default CocWarningSign ctermfg=Brown guifg=#ff922b guibg=NONE
|
||||||
|
hi default CocInfoSign ctermfg=Yellow guifg=#fab005 guibg=NONE
|
||||||
|
hi default CocHintSign ctermfg=Blue guifg=#15aabf guibg=NONE
|
||||||
|
hi default CocSelectedText ctermfg=Red guifg=#fb4934 guibg=NONE
|
||||||
|
hi default CocCodeLens ctermfg=Gray guifg=#999999 guibg=NONE
|
||||||
hi default CocUnderline cterm=underline gui=underline
|
hi default CocUnderline cterm=underline gui=underline
|
||||||
hi default CocBold term=bold cterm=bold gui=bold
|
hi default CocBold term=bold cterm=bold gui=bold
|
||||||
hi default CocErrorSign ctermfg=Red guifg=#ff0000
|
hi default CocItalic term=italic cterm=italic gui=italic
|
||||||
hi default CocWarningSign ctermfg=Brown guifg=#ff922b
|
hi default CocMarkdownLink ctermfg=Blue guifg=#15aabf guibg=NONE
|
||||||
hi default CocInfoSign ctermfg=Yellow guifg=#fab005
|
hi default link CocMarkdownCode markdownCode
|
||||||
hi default CocHintSign ctermfg=Blue guifg=#15aabf
|
hi default link CocMarkdownHeader markdownH1
|
||||||
hi default CocSelectedText ctermfg=Red guifg=#fb4934
|
|
||||||
hi default CocCodeLens ctermfg=Gray guifg=#999999
|
|
||||||
hi default link CocMenuSel PmenuSel
|
hi default link CocMenuSel PmenuSel
|
||||||
hi default link CocErrorFloat CocErrorSign
|
hi default link CocErrorFloat CocErrorSign
|
||||||
hi default link CocWarningFloat CocWarningSign
|
hi default link CocWarningFloat CocWarningSign
|
||||||
|
@ -336,6 +360,9 @@ function! s:Hi() abort
|
||||||
else
|
else
|
||||||
hi default link CocFloating Pmenu
|
hi default link CocFloating Pmenu
|
||||||
endif
|
endif
|
||||||
|
if !exists('*sign_getdefined') || empty(sign_getdefined('CocCurrentLine'))
|
||||||
|
sign define CocCurrentLine linehl=CocMenuSel
|
||||||
|
endif
|
||||||
if has('nvim-0.5.0')
|
if has('nvim-0.5.0')
|
||||||
hi default CocCursorTransparent gui=strikethrough blend=100
|
hi default CocCursorTransparent gui=strikethrough blend=100
|
||||||
endif
|
endif
|
||||||
|
@ -376,17 +403,9 @@ function! s:ShowInfo()
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" check bundle
|
" check bundle
|
||||||
let file = s:root.'/bin/server.js'
|
|
||||||
if filereadable(file)
|
|
||||||
let file = s:root.'/lib/attach.js'
|
|
||||||
if !filereadable(file)
|
|
||||||
call add(lines, 'Error: javascript bundle not found, please compile the code of coc.nvim.')
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let file = s:root.'/build/index.js'
|
let file = s:root.'/build/index.js'
|
||||||
if !filereadable(file)
|
if !filereadable(file)
|
||||||
call add(lines, 'Error: javascript bundle not found, please remove coc.nvim folder and reinstall it.')
|
call add(lines, 'Error: javascript bundle not found, please compile code of coc.nvim by esbuild.')
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
if !empty(lines)
|
if !empty(lines)
|
||||||
belowright vnew
|
belowright vnew
|
||||||
|
@ -412,11 +431,13 @@ command! -nargs=0 CocLocalConfig :call coc#rpc#notify('openLocalConfig', [])
|
||||||
command! -nargs=0 CocRestart :call coc#rpc#restart()
|
command! -nargs=0 CocRestart :call coc#rpc#restart()
|
||||||
command! -nargs=0 CocStart :call coc#rpc#start_server()
|
command! -nargs=0 CocStart :call coc#rpc#start_server()
|
||||||
command! -nargs=0 CocRebuild :call coc#util#rebuild()
|
command! -nargs=0 CocRebuild :call coc#util#rebuild()
|
||||||
|
command! -nargs=1 -complete=custom,s:LoadedExtensions CocWatch :call coc#rpc#notify('watchExtension', [<f-args>])
|
||||||
command! -nargs=+ -complete=custom,s:SearchOptions CocSearch :call coc#rpc#notify('search', [<f-args>])
|
command! -nargs=+ -complete=custom,s:SearchOptions CocSearch :call coc#rpc#notify('search', [<f-args>])
|
||||||
command! -nargs=+ -complete=custom,s:ExtensionList CocUninstall :call CocActionAsync('uninstallExtension', <f-args>)
|
command! -nargs=+ -complete=custom,s:ExtensionList CocUninstall :call CocActionAsync('uninstallExtension', <f-args>)
|
||||||
command! -nargs=* -complete=custom,s:CommandList -range CocCommand :call coc#rpc#notify('runCommand', [<f-args>])
|
command! -nargs=* -complete=custom,s:CommandList -range CocCommand :call coc#rpc#notify('runCommand', [<f-args>])
|
||||||
command! -nargs=* -complete=custom,coc#list#options CocList :call coc#rpc#notify('openList', [<f-args>])
|
command! -nargs=* -complete=custom,coc#list#options CocList :call coc#rpc#notify('openList', [<f-args>])
|
||||||
command! -nargs=? -complete=custom,coc#list#names CocListResume :call coc#rpc#notify('listResume', [<f-args>])
|
command! -nargs=? -complete=custom,coc#list#names CocListResume :call coc#rpc#notify('listResume', [<f-args>])
|
||||||
|
command! -nargs=0 -complete=custom,coc#list#names CocListCancel :call coc#rpc#notify('listCancel', [])
|
||||||
command! -nargs=? -complete=custom,coc#list#names CocPrev :call coc#rpc#notify('listPrev', [<f-args>])
|
command! -nargs=? -complete=custom,coc#list#names CocPrev :call coc#rpc#notify('listPrev', [<f-args>])
|
||||||
command! -nargs=? -complete=custom,coc#list#names CocNext :call coc#rpc#notify('listNext', [<f-args>])
|
command! -nargs=? -complete=custom,coc#list#names CocNext :call coc#rpc#notify('listNext', [<f-args>])
|
||||||
command! -nargs=? -complete=custom,coc#list#names CocFirst :call coc#rpc#notify('listFirst', [<f-args>])
|
command! -nargs=? -complete=custom,coc#list#names CocFirst :call coc#rpc#notify('listFirst', [<f-args>])
|
||||||
|
@ -438,7 +459,8 @@ vnoremap <silent> <Plug>(coc-format-selected) :<C-u>call CocActionAs
|
||||||
vnoremap <silent> <Plug>(coc-codeaction-selected) :<C-u>call CocActionAsync('codeAction', visualmode())<CR>
|
vnoremap <silent> <Plug>(coc-codeaction-selected) :<C-u>call CocActionAsync('codeAction', visualmode())<CR>
|
||||||
nnoremap <Plug>(coc-codeaction-selected) :<C-u>set operatorfunc=<SID>CodeActionFromSelected<CR>g@
|
nnoremap <Plug>(coc-codeaction-selected) :<C-u>set operatorfunc=<SID>CodeActionFromSelected<CR>g@
|
||||||
nnoremap <Plug>(coc-codeaction) :<C-u>call CocActionAsync('codeAction', '')<CR>
|
nnoremap <Plug>(coc-codeaction) :<C-u>call CocActionAsync('codeAction', '')<CR>
|
||||||
nnoremap <Plug>(coc-codeaction-line) :<C-u>call CocActionAsync('codeAction', 'n')<CR>
|
nnoremap <Plug>(coc-codeaction-line) :<C-u>call CocActionAsync('codeAction', 'line')<CR>
|
||||||
|
nnoremap <Plug>(coc-codeaction-cursor) :<C-u>call CocActionAsync('codeAction', 'cursor')<CR>
|
||||||
nnoremap <silent> <Plug>(coc-rename) :<C-u>call CocActionAsync('rename')<CR>
|
nnoremap <silent> <Plug>(coc-rename) :<C-u>call CocActionAsync('rename')<CR>
|
||||||
nnoremap <silent> <Plug>(coc-format-selected) :<C-u>set operatorfunc=<SID>FormatFromSelected<CR>g@
|
nnoremap <silent> <Plug>(coc-format-selected) :<C-u>set operatorfunc=<SID>FormatFromSelected<CR>g@
|
||||||
nnoremap <silent> <Plug>(coc-format) :<C-u>call CocActionAsync('format')<CR>
|
nnoremap <silent> <Plug>(coc-format) :<C-u>call CocActionAsync('format')<CR>
|
||||||
|
|
Loading…
Reference in a new issue