tessl install tessl/npm-coc-nvim@0.0.0LSP based intellisense engine for neovim & vim8.
Complexity: Basic | Category: Core
Common Tasks: Install extensions | Update extensions | List extensions | Configure extensions
Extension management for coc.nvim including installation, updates, activation, and monitoring of extensions.
:CocInstall coc-json coc-tsserverInstall one or more extensions from npm.
:CocUpdateUpdate all installed extensions asynchronously.
:CocList extensionsInteractive list of extensions with actions.
let g:coc_global_extensions = ['coc-json', 'coc-tsserver']Extensions to auto-install on startup.
let stats = CocAction('extensionStats')
for ext in stats
echo ext.id . ' - ' . ext.state
endfor:CocInstall [-terminal] [-sync] {extension}...Install one or more extensions from npm. Extensions are installed to the extensions directory.
Options:
-terminal: Show installation progress in a terminal window-sync: Run installation synchronously (blocks until complete)Parameters:
{extension}...: One or more extension names (e.g., coc-json, coc-tsserver)Example:
" Install single extension
:CocInstall coc-json
" Install multiple extensions
:CocInstall coc-tsserver coc-eslint coc-prettier
" Install with progress terminal
:CocInstall -terminal coc-python
" Install and wait for completion
:CocInstall -sync coc-rust-analyzer:CocUninstall {extension}...Uninstall one or more extensions.
Parameters:
{extension}...: One or more extension names to uninstallExample:
:CocUninstall coc-java
:CocUninstall coc-css coc-html:CocUpdateUpdate all installed extensions asynchronously. Progress is shown in the status line.
Example:
:CocUpdate
" Map to key
nnoremap <silent> <leader>cu :CocUpdate<CR>:CocUpdateSyncUpdate all installed extensions synchronously. Vim will be blocked until updates complete.
Example:
:CocUpdateSync:CocRebuildRebuild all native modules for extensions. Use this after updating Node.js or when extensions fail to load due to native module issues.
Example:
:CocRebuild
" Rebuild after Node.js update
:CocRebuild:CocWatch {extension}Watch an extension directory for changes during development. Changes trigger automatic recompilation.
Parameters:
{extension}: Extension name to watchExample:
:CocWatch coc-tsserver
" Watch custom extension
:CocWatch my-custom-extensionlet g:coc_global_extensions = ['coc-json', 'coc-tsserver']List of extensions to automatically install when coc.nvim starts. Extensions are only installed if not already present.
Type: List
Default: []
Example:
" Essential extensions
let g:coc_global_extensions = [
\ 'coc-json',
\ 'coc-tsserver',
\ 'coc-eslint',
\ 'coc-prettier',
\ 'coc-html',
\ 'coc-css',
\ 'coc-python',
\ 'coc-rust-analyzer',
\ 'coc-yaml',
\ 'coc-snippets',
\ 'coc-pairs'
\ ]coc#add_extension(...names)Add extensions to the auto-install list. This is deprecated in favor of g:coc_global_extensions.
Parameters:
...names: Variable number of extension namesExample:
call coc#add_extension('coc-json', 'coc-tsserver')coc#util#install_extension(names)Programmatically install extensions.
Parameters:
names: List of extension names to installExample:
call coc#util#install_extension(['coc-json', 'coc-html'])
" Install if missing
let missing = ['coc-json', 'coc-css']
call coc#util#install_extension(missing)coc#util#update_extensions([sync])Update all extensions programmatically.
Parameters:
sync: Optional boolean, if 1 runs synchronouslyExample:
" Async update
call coc#util#update_extensions()
" Sync update
call coc#util#update_extensions(1)coc#util#rebuild()Rebuild native modules for all extensions.
Example:
call coc#util#rebuild()CocAction('extensionStats')
" Returns: listGet statistics for all installed extensions including version, state, and metadata.
Returns: List of extension stat objects with properties:
id: Extension nameversion: Installed versionstate: "activated", "disabled", or "unknown"root: Installation directoryExample:
let stats = CocAction('extensionStats')
for ext in stats
echo ext.id . ' v' . ext.version . ' - ' . ext.state
endfor
" Check specific extension
let tsserver = filter(copy(stats), 'v:val.id == "coc-tsserver"')[0]
echo tsserver.stateCocAction('loadedExtensions')
" Returns: listGet list of currently loaded extension IDs.
Returns: List of extension names.
Example:
let loaded = CocAction('loadedExtensions')
echo 'Loaded extensions: ' . join(loaded, ', ')
" Check if specific extension loaded
if index(loaded, 'coc-tsserver') >= 0
echo 'TypeScript server is loaded'
endifCocAction('activeExtension', name)Activate a specific extension.
Parameters:
name: Extension name to activateExample:
call CocAction('activeExtension', 'coc-tsserver')CocAction('deactivateExtension', name)Deactivate a specific extension.
Parameters:
name: Extension name to deactivateExample:
call CocAction('deactivateExtension', 'coc-tsserver')CocAction('toggleExtension', name)Toggle an extension's activation state.
Parameters:
name: Extension name to toggleExample:
call CocAction('toggleExtension', 'coc-eslint')
" Quick toggle mapping
nnoremap <silent> <leader>te :call CocAction('toggleExtension', 'coc-eslint')<CR>CocAction('reloadExtension', name)Reload a specific extension. Useful during development.
Parameters:
name: Extension name to reloadExample:
call CocAction('reloadExtension', 'coc-tsserver')
" Reload after config changes
nnoremap <silent> <leader>re :call CocAction('reloadExtension', 'coc-tsserver')<CR>CocAction('uninstallExtension', name)Uninstall a specific extension.
Parameters:
name: Extension name to uninstallExample:
call CocAction('uninstallExtension', 'coc-java'):CocList extensionsOpen an interactive list of installed extensions with actions:
Example:
" Open extensions list
:CocList extensions
" With preview
:CocList --normal extensions
" Map to key
nnoremap <silent> <leader>ce :CocList extensions<CR>Extensions can be configured in coc-settings.json. Each extension may have its own configuration namespace.
{
"tsserver.enable": true,
"tsserver.formatOnType": true,
"eslint.autoFixOnSave": true,
"prettier.singleQuote": true,
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"rust-analyzer.cargo.loadOutDirsFromCheck": true
}Access via:
:CocConfigcoc#util#extension_root()
" Returns: stringGet the absolute path to the extensions directory.
Returns: Path to extensions directory.
Example:
let ext_dir = coc#util#extension_root()
echo 'Extensions installed at: ' . ext_dir
" Check if directory exists
if isdirectory(ext_dir)
echo 'Extension count: ' . len(readdir(ext_dir))
endifg:coc_vim_commandsList of Vim commands registered by extensions.
Type: List (read-only)
Example:
if exists('g:coc_vim_commands')
echo 'Registered commands: ' . join(g:coc_vim_commands, ', ')
endif" In your vimrc/init.vim
let g:coc_global_extensions = [
\ 'coc-json',
\ 'coc-tsserver',
\ 'coc-eslint',
\ 'coc-prettier',
\ 'coc-html',
\ 'coc-css',
\ 'coc-python',
\ 'coc-rust-analyzer',
\ 'coc-yaml',
\ 'coc-snippets',
\ 'coc-pairs'
\ ]" Install specific extensions
:CocInstall coc-snippets coc-pairs
" Update all extensions
:CocUpdate
" Check installed extensions
:CocList extensionsfunction! CheckExtensionStatus() abort
let stats = CocAction('extensionStats')
let active = 0
let inactive = 0
for ext in stats
if ext.state == 'activated'
let active += 1
else
let inactive += 1
endif
endfor
echo 'Extensions: ' . len(stats) . ' total'
echo 'Active: ' . active
echo 'Inactive: ' . inactive
endfunction
command! CocExtensionStatus call CheckExtensionStatus()function! InstallMissingExtensions() abort
let required = g:coc_global_extensions
let installed = CocAction('loadedExtensions')
let missing = []
for ext in required
if index(installed, ext) < 0
call add(missing, ext)
endif
endfor
if len(missing) > 0
echo 'Installing missing extensions: ' . join(missing, ', ')
call coc#util#install_extension(missing)
else
echo 'All required extensions are installed'
endif
endfunction
command! CocInstallMissing call InstallMissingExtensions()" Quick toggle for common extensions
nnoremap <silent> <leader>te :call ToggleExtension('coc-eslint')<CR>
nnoremap <silent> <leader>tp :call ToggleExtension('coc-prettier')<CR>
function! ToggleExtension(name) abort
call CocAction('toggleExtension', a:name)
echo 'Toggled ' . a:name
endfunction" Watch extension during development
function! DevExtension(name) abort
execute 'CocWatch ' . a:name
echo 'Watching ' . a:name . ' for changes'
endfunction
" Reload extension after changes
function! ReloadDevExtension(name) abort
call CocAction('reloadExtension', a:name)
echo 'Reloaded ' . a:name
endfunction
" Development commands
command! -nargs=1 CocDev call DevExtension(<q-args>)
command! -nargs=1 CocReload call ReloadDevExtension(<q-args>)function! CheckExtensionUpdates() abort
echo 'Checking for extension updates...'
CocUpdateSync
echo 'Extension update complete'
endfunction
" Auto-update weekly
autocmd VimEnter * call timer_start(60000 * 60 * 24 * 7, {-> CheckExtensionUpdates()})function! ShowExtensionInfo() abort
let stats = CocAction('extensionStats')
echo "Installed Extensions:\n"
for ext in stats
let status = ext.state == 'activated' ? '✓' : '✗'
echo status . ' ' . ext.id . ' (v' . ext.version . ')'
endfor
echo "\nExtensions directory: " . coc#util#extension_root()
endfunction
command! CocExtensionInfo call ShowExtensionInfo()" Load extensions based on filetype
function! LoadExtensionForFiletype() abort
let ft = &filetype
let ft_extensions = {
\ 'javascript': 'coc-tsserver',
\ 'typescript': 'coc-tsserver',
\ 'python': 'coc-python',
\ 'rust': 'coc-rust-analyzer',
\ 'go': 'coc-go',
\ 'java': 'coc-java'
\ }
if has_key(ft_extensions, ft)
let ext = ft_extensions[ft]
call CocAction('activeExtension', ext)
endif
endfunction
autocmd FileType * call LoadExtensionForFiletype()function! CleanupExtensions() abort
let installed = CocAction('loadedExtensions')
let required = g:coc_global_extensions
let unused = []
for ext in installed
if index(required, ext) < 0
call add(unused, ext)
endif
endfor
if len(unused) > 0
echo 'Unused extensions found:'
for ext in unused
echo ' - ' . ext
endfor
if confirm('Uninstall unused extensions?', "&Yes\n&No") == 1
for ext in unused
call CocAction('uninstallExtension', ext)
endfor
endif
else
echo 'No unused extensions'
endif
endfunction
command! CocCleanup call CleanupExtensions()" Define extension sets per language
let g:coc_extension_sets = {
\ 'web': ['coc-tsserver', 'coc-eslint', 'coc-prettier', 'coc-html', 'coc-css'],
\ 'python': ['coc-python', 'coc-pylint'],
\ 'rust': ['coc-rust-analyzer'],
\ 'go': ['coc-go']
\ }
function! InstallExtensionSet(name) abort
if has_key(g:coc_extension_sets, a:name)
call coc#util#install_extension(g:coc_extension_sets[a:name])
echo 'Installing ' . a:name . ' extension set'
else
echo 'Unknown extension set: ' . a:name
endif
endfunction
command! -nargs=1 CocInstallSet call InstallExtensionSet(<q-args>)If extension installation fails:
" Check network connectivity
:!curl -I https://registry.npmjs.org
" Try with terminal to see errors
:CocInstall -terminal coc-extension-name
" Check logs
:CocOpenLog
" Try sync installation
:CocInstall -sync coc-extension-nameIf an extension fails to load:
" Check extension status
let stats = CocAction('extensionStats')
let ext = filter(copy(stats), 'v:val.id == "coc-extension-name"')[0]
echo ext.state
" Try activating manually
call CocAction('activeExtension', 'coc-extension-name')
" Rebuild native modules
:CocRebuild
" Reinstall extension
:CocUninstall coc-extension-name
:CocInstall coc-extension-nameIf you see native module errors:
" Rebuild all native modules
:CocRebuild
" Or programmatically
call coc#util#rebuild()
" Restart service
:CocRestartProblem: Extension installation fails or hangs.
Solutions:
:!curl -I https://registry.npmjs.org:CocInstall -terminal extension-name:CocOpenLogProblem: Extension installed but not appearing in :CocList extensions.
Solutions:
:CocRestartCocAction('extensionStats')call CocAction('activeExtension', 'name'):CocRebuildProblem: Extension is loaded but commands don't work.
Solutions:
CocAction('loadedExtensions')echo g:coc_vim_commandscall CocAction('reloadExtension', 'name'):CocRestartProblem: Extensions in g:coc_global_extensions don't install.
Solutions:
echo g:coc_global_extensions:CocInstall extension-name:CocOpenLogProblem: :CocUpdate fails or extensions won't update.
Solutions:
:CocUpdateSync:CocInstall extension-name (reinstalls latest):CocOpenLogProblem: Multiple extensions interfere with each other.
Solutions:
call CocAction('deactivateExtension', 'name')coc-settings.json:CocList extensions to toggle extensions