tessl install tessl/npm-coc-nvim@0.0.0LSP based intellisense engine for neovim & vim8.
Complexity: Basic | Category: Core
Common Tasks: Edit settings | Set values | Manage directories
Configuration management for coc.nvim including JSON-based settings, directory locations, and programmatic configuration.
:CocConfigOpens user configuration in default editor.
call coc#config('suggest.noselect', v:true)Programmatically modify settings.
let timeout = coc#util#get_config('suggest.timeout')Read current configuration.
echo coc#util#get_config_home() " Config directory
echo coc#util#get_data_home() " Data directory:CocConfigOpen the user configuration file (coc-settings.json) in a new buffer. Located at ~/.config/nvim/coc-settings.json by default. Creates file if missing.
Example:
:CocConfig
" Or map to a key
nnoremap <silent> <leader>cc :CocConfig<CR>:CocLocalConfigOpen workspace-local configuration file (.vim/coc-settings.json relative to workspace root). Workspace settings override user settings.
Example:
:CocLocalConfig
" Create workspace-specific settingscoc#config(section, value)Programmatically set a configuration value. This modifies in-memory configuration without changing the JSON file.
Parameters:
section: Configuration section path (dot-separated, e.g., 'suggest.noselect')value: Value to set (string, number, boolean, list, or dict)Example:
" Disable auto-select in completion
call coc#config('suggest.noselect', v:true)
" Set completion timeout
call coc#config('suggest.timeout', 5000)
" Configure language server
call coc#config('languageserver.go', {
\ 'command': 'gopls',
\ 'rootPatterns': ['go.mod', '.git'],
\ 'filetypes': ['go']
\ })coc#util#get_config(key)
" Returns: anyGet a configuration value.
Parameters:
key: Configuration key (dot-separated path)Returns: The configuration value, or v:null if not set.
Example:
let timeout = coc#util#get_config('suggest.timeout')
echo 'Completion timeout: ' . timeout
if coc#util#get_config('diagnostic.enable')
echo 'Diagnostics are enabled'
endiflet g:coc_user_config = {}Dictionary of configuration overrides applied on top of coc-settings.json. Useful for setting configuration in vimrc before coc.nvim loads.
Type: Dictionary
Default: {}
Example:
let g:coc_user_config = {
\ 'suggest.noselect': v:true,
\ 'diagnostic.errorSign': '✗',
\ 'diagnostic.warningSign': '⚠',
\ 'coc.preferences.formatOnSaveFiletypes': ['javascript', 'typescript']
\ }let g:coc_config_home = '/path/to/config'Override the configuration directory location. By default, coc.nvim uses the Neovim/Vim config directory.
Type: String
Default: Auto-detected (~/.config/nvim for Neovim, ~/.vim for Vim)
Example:
" Use a custom config directory
let g:coc_config_home = expand('~/.config/coc')let g:coc_data_home = '/path/to/data'Override the data directory location where extensions and state are stored.
Type: String Default: Auto-detected platform-specific location
Example:
" Use a custom data directory
let g:coc_data_home = expand('~/coc-data')let g:coc_filetype_map = {}Map Vim filetypes to language identifiers used by language servers.
Type: Dictionary
Default: {}
Example:
let g:coc_filetype_map = {
\ 'yaml.ansible': 'ansible',
\ 'javascript.jsx': 'javascriptreact',
\ 'typescript.tsx': 'typescriptreact'
\ }let g:coc_uri_prefix_replace_patterns = {}Dictionary of URI prefix replacement patterns. Used to transform file URIs, useful for remote development or custom file schemes.
Type: Dictionary
Default: {}
Example:
" Replace remote URIs with local paths
let g:coc_uri_prefix_replace_patterns = {
\ 'file:///remote/': 'file:///local/'
\ }coc#util#get_config_home()
" Returns: stringGet the coc.nvim configuration directory path.
Returns: Absolute path to config directory (e.g., ~/.config/nvim or ~/.vim).
Example:
let config_dir = coc#util#get_config_home()
echo 'Config directory: ' . config_dircoc#util#get_data_home()
" Returns: stringGet the coc.nvim data directory path where extensions and data are stored.
Returns: Absolute path to data directory (e.g., ~/.config/coc or ~/.local/share/coc).
Example:
let data_dir = coc#util#get_data_home()
echo 'Data directory: ' . data_dircoc#util#extension_root()
" Returns: stringGet the directory where coc.nvim extensions are installed.
Returns: Absolute path to extensions directory (typically {data_home}/extensions).
Example:
let ext_dir = coc#util#extension_root()
echo 'Extensions installed at: ' . ext_dirThe coc-settings.json file uses JSON format with schema validation. Here's an example configuration:
{
"suggest.noselect": true,
"suggest.enablePreselect": false,
"suggest.timeout": 5000,
"suggest.maxCompleteItemCount": 20,
"diagnostic.errorSign": "✗",
"diagnostic.warningSign": "⚠",
"diagnostic.infoSign": "ℹ",
"diagnostic.hintSign": "➤",
"coc.preferences.formatOnSaveFiletypes": [
"javascript",
"typescript",
"json"
],
"languageserver": {
"go": {
"command": "gopls",
"rootPatterns": ["go.mod", ".git"],
"filetypes": ["go"]
}
}
}suggest.noselect: Don't auto-select first item (default: false)suggest.enablePreselect: Enable preselect from language server (default: true)suggest.timeout: Completion timeout in milliseconds (default: 5000)suggest.maxCompleteItemCount: Maximum completion items (default: 50)suggest.snippetIndicator: Snippet indicator text (default: "~")diagnostic.errorSign: Error sign text (default: ">>")diagnostic.warningSign: Warning sign text (default: ">>")diagnostic.infoSign: Info sign text (default: ">>")diagnostic.hintSign: Hint sign text (default: ">>")diagnostic.virtualText: Enable virtual text (default: false)diagnostic.virtualTextCurrentLineOnly: Show virtual text only on current line (default: true)coc.preferences.formatOnSaveFiletypes: Filetypes to format on save (default: [])coc.preferences.formatOnType: Enable format on type (default: false)list.source.files.command: Command for files list (default: varies by platform)list.source.files.args: Arguments for files command (default: [])list.indicator: List indicator character (default: ">")" Open user config
:CocConfig
" Open workspace config
:CocLocalConfig
" Open config with custom command
nnoremap <silent> <leader>cc :CocConfig<CR>" Set configuration values in vimrc
function! s:ConfigureCoc() abort
" Completion settings
call coc#config('suggest.noselect', v:true)
call coc#config('suggest.enablePreselect', v:false)
call coc#config('suggest.timeout', 3000)
" Diagnostic signs
call coc#config('diagnostic.errorSign', '✗')
call coc#config('diagnostic.warningSign', '⚠')
call coc#config('diagnostic.infoSign', 'ℹ')
call coc#config('diagnostic.hintSign', '➤')
" Enable virtual text
call coc#config('diagnostic.virtualText', v:true)
call coc#config('diagnostic.virtualTextCurrentLineOnly', v:true)
" Format on save
call coc#config('coc.preferences.formatOnSaveFiletypes', [
\ 'javascript',
\ 'typescript',
\ 'json'
\ ])
endfunction
autocmd User CocNvimInit call s:ConfigureCoc()" Configure a custom language server via vimrc
let g:coc_user_config = {
\ 'languageserver': {
\ 'lua': {
\ 'command': 'lua-language-server',
\ 'filetypes': ['lua'],
\ 'rootPatterns': ['.git', '.luarc.json'],
\ 'settings': {
\ 'Lua': {
\ 'diagnostics': {
\ 'globals': ['vim']
\ }
\ }
\ }
\ }
\ }
\ }" Check configuration values
function! ShowCocConfig() abort
echo 'Config home: ' . coc#util#get_config_home()
echo 'Data home: ' . coc#util#get_data_home()
echo 'Extensions: ' . coc#util#extension_root()
echo 'Timeout: ' . coc#util#get_config('suggest.timeout')
endfunction
command! ShowCocConfig call ShowCocConfig()" Auto-load project-specific settings
function! s:LoadProjectConfig() abort
let config_file = getcwd() . '/.vim/coc-settings.json'
if filereadable(config_file)
echom 'Loading project config: ' . config_file
endif
endfunction
autocmd DirChanged * call s:LoadProjectConfig()" Set custom root patterns per filetype
autocmd FileType rust let b:coc_root_patterns = ['Cargo.toml', '.git']
autocmd FileType go let b:coc_root_patterns = ['go.mod', '.git']
autocmd FileType javascript,typescript let b:coc_root_patterns = ['package.json', 'tsconfig.json', '.git']" Backup configuration before editing
function! BackupCocConfig() abort
let config = coc#util#get_config_home() . '/coc-settings.json'
if filereadable(config)
let backup = config . '.backup'
call writefile(readfile(config), backup)
echo 'Config backed up to: ' . backup
endif
endfunction
command! CocConfigBackup call BackupCocConfig()If you set an invalid configuration value, coc.nvim will log an error. Check :CocOpenLog for details.
" This will fail - wrong type
call coc#config('suggest.timeout', 'not-a-number')
" Check logs
:CocOpenLogIf coc-settings.json doesn't exist, :CocConfig will create it automatically with an empty JSON object {}.
Coc.nvim validates settings against a JSON schema. Invalid keys or value types will be reported in logs.
Problem: Changed settings but no visible effect.
Solutions:
:CocRestart:CocConfig and check for syntax errorsProblem: :CocConfig opens empty buffer or wrong location.
Solutions:
echo coc#util#get_config_home()let g:coc_config_home = '/path/to/config'mkdir -p ~/.config/nvimProblem: Settings in coc-settings.json are ignored.
Solutions:
:CocOpenLog shows validation errorscoc#config() to confirm setting worksProblem: Unexpected behavior due to multiple config sources.
Solutions:
g:coc_user_config > workspace config > user config:CocCommand workspace.showOutput to see effective config