JSON-based configuration system compatible with VSCode settings. Supports both global and workspace-specific configurations with live reloading, schema validation, and comprehensive customization options for all aspects of coc.nvim behavior.
Manage global and workspace-specific configuration files with automatic creation and editing support.
:CocConfig
" Open global configuration file (coc-settings.json)
" Creates file if it doesn't exist
" Located in coc config directory
:CocLocalConfig
" Open workspace-specific configuration file
" Creates .vim/coc-settings.json in project root
" Takes precedence over global config
coc#util#get_config_home()
" Get coc configuration directory path
" Returns: string - path to config directory
g:coc_config_home
" Override default config directory
" Type: string - custom config pathUsage Examples:
" Open global config
:CocConfig
" Open workspace config for project-specific settings
:CocLocalConfig
" Custom config directory
let g:coc_config_home = '~/.vim/coc-config'
" Check config location
echo 'Config directory: ' . coc#util#get_config_home()
" Auto-create basic config
function! SetupCocConfig()
let config_file = coc#util#get_config_home() . '/coc-settings.json'
if !filereadable(config_file)
call writefile([
\ '{',
\ ' "suggest.noselect": false,',
\ ' "diagnostic.enable": true,',
\ ' "coc.preferences.formatOnSaveFiletypes": ["json", "javascript", "typescript"]',
\ '}'
\ ], config_file)
echo 'Created basic coc-settings.json'
endif
endfunctionModify configuration settings programmatically with runtime updates and validation.
coc#config({section}, {value})
" Set configuration value programmatically
" Parameters:
" {section} - string: configuration key (dot notation)
" {value} - any: configuration value
" Returns: void
g:coc_user_config
" Runtime configuration dictionary
" Type: dict - user config overrides
" Merged with JSON configuration
CocAction('workspace.configuration', {section})
" Get configuration value
" Parameters:
" {section} - string: configuration section
" Returns: configuration valueUsage Examples:
" Set configuration values
call coc#config('suggest.noselect', v:false)
call coc#config('diagnostic.enable', v:true)
call coc#config('coc.preferences.formatOnSaveFiletypes', ['json', 'js'])
" Runtime config via global variable
let g:coc_user_config = {
\ 'suggest.autoTrigger': 'always',
\ 'diagnostic.checkCurrentLine': v:true,
\ }
" Get configuration value
let formatOnSave = CocAction('workspace.configuration', 'coc.preferences.formatOnSaveFiletypes')
echo 'Format on save: ' . string(formatOnSave)
" Conditional configuration
if has('nvim-0.5.0')
call coc#config('coc.preferences.useFloatWindow', v:true)
endifEssential settings controlling coc.nvim behavior, performance, and user experience.
" Completion settings
"suggest.autoTrigger": "always" | "none" | "trigger"
"suggest.noselect": boolean
"suggest.enablePreselect": boolean
"suggest.timeout": number
"suggest.minTriggerInputLength": number
"suggest.maxCompleteItemCount": number
" Diagnostic settings
"diagnostic.enable": boolean
"diagnostic.level": "error" | "warning" | "information" | "hint"
"diagnostic.checkCurrentLine": boolean
"diagnostic.maxWindowHeight": number
"diagnostic.refreshOnInsertMode": boolean
" LSP settings
"languageserver": {
"{server-name}": {
"command": string,
"args": string[],
"filetypes": string[],
"rootPatterns": string[],
"settings": object
}
}
" UI preferences
"coc.preferences.useFloatWindow": boolean
"coc.preferences.hoverTarget": "preview" | "echo" | "float"
"coc.preferences.previewAutoClose": booleanUsage Examples:
" Comprehensive configuration example
{
"suggest.autoTrigger": "always",
"suggest.noselect": false,
"suggest.enablePreselect": true,
"suggest.timeout": 500,
"suggest.minTriggerInputLength": 1,
"suggest.maxCompleteItemCount": 50,
"diagnostic.enable": true,
"diagnostic.level": "warning",
"diagnostic.checkCurrentLine": false,
"diagnostic.maxWindowHeight": 10,
"diagnostic.refreshOnInsertMode": true,
"diagnostic.virtualText": true,
"coc.preferences.useFloatWindow": true,
"coc.preferences.hoverTarget": "float",
"coc.preferences.previewAutoClose": true,
"coc.preferences.formatOnSaveFiletypes": [
"javascript", "typescript", "json", "css", "html", "python"
]
}Configure language servers for different programming languages with custom settings and initialization options.
" Language server configuration structure:
"languageserver": {
"{server-id}": {
"command": string, // Server executable command
"args": string[], // Command line arguments
"filetypes": string[], // Supported file types
"rootPatterns": string[], // Project root detection
"settings": object, // Server-specific settings
"trace.server": string, // Trace level
"initializationOptions": object
}
}Usage Examples:
" Language server configurations
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod", ".vim/", ".git/", ".hg/"],
"filetypes": ["go"],
"initializationOptions": {
"usePlaceholders": true,
"completeUnimported": true
}
},
"rust": {
"command": "rust-analyzer",
"filetypes": ["rust"],
"rootPatterns": ["Cargo.toml"],
"settings": {
"rust-analyzer": {
"cargo": {
"loadOutDirsFromCheck": true
},
"procMacro": {
"enable": true
}
}
}
},
"lua": {
"command": "lua-language-server",
"filetypes": ["lua"],
"rootPatterns": [".luarc.json", ".git/"],
"settings": {
"Lua": {
"diagnostics": {
"globals": ["vim"]
},
"workspace": {
"library": {
"${3rd}/luv/library": true,
"${3rd}/busted/library": true
}
}
}
}
}
}
}Configure performance-related settings for optimal experience with large codebases and resource management.
" Performance settings
"coc.preferences.maxFileSize": string // Skip large files
"coc.preferences.jumpCommand": string // Jump command
"coc.preferences.enableMessageDialog": boolean // Dialog vs echo
"coc.preferences.extensionUpdateCheck": string // Update frequency
" Memory and resource settings
"workspace.ignoredFiletypes": string[] // Skip file types
"workspace.ignoredFolders": string[] // Skip directories
"workspace.maxFileSize": number // File size limit
" Completion performance
"suggest.snippetIndicator": string // Snippet indicator
"suggest.filterGraceful": boolean // Graceful filtering
"suggest.localityBonus": boolean // Local completions firstUsage Examples:
" Performance optimization
{
"coc.preferences.maxFileSize": "1MB",
"coc.preferences.jumpCommand": "edit",
"coc.preferences.enableMessageDialog": false,
"coc.preferences.extensionUpdateCheck": "weekly",
"workspace.ignoredFiletypes": ["markdown", "text"],
"workspace.ignoredFolders": ["node_modules", ".git", "target", "build"],
"workspace.maxFileSize": 5242880,
"suggest.filterGraceful": true,
"suggest.localityBonus": true,
"suggest.snippetIndicator": "►"
}
" Conditional performance settings
if has('nvim-0.5')
call coc#config('coc.preferences.useFloatWindow', v:true)
else
call coc#config('coc.preferences.hoverTarget', 'preview')
endifCustomize key mappings, UI behavior, and interface preferences through configuration.
" UI configuration options
"coc.preferences.colorSupport": boolean // Color support
"coc.preferences.previewMaxHeight": number // Preview height
"coc.preferences.currentFunctionSymbol": string // Function symbol
"coc.preferences.bracketEnterImprove": boolean // Bracket behavior
" List interface settings
"list.indicator": string // List indicator
"list.selectedSignText": string // Selection indicator
"list.normalMappings": object // Normal mode mappings
"list.insertMappings": object // Insert mode mappingsUsage Examples:
" UI customization
{
"coc.preferences.colorSupport": true,
"coc.preferences.previewMaxHeight": 20,
"coc.preferences.currentFunctionSymbol": "🔗",
"coc.preferences.bracketEnterImprove": true,
"list.indicator": "❯",
"list.selectedSignText": "▶",
"list.normalMappings": {
"<C-c>": "do:exit",
"<C-j>": "do:next",
"<C-k>": "do:previous"
},
"list.insertMappings": {
"<C-j>": "do:next",
"<C-k>": "do:previous",
"<C-v>": "action:vsplit"
}
}Tools for validating configuration syntax and debugging configuration issues.
:CocCommand workspace.showOutput
" Show coc.nvim output channel
" Displays configuration errors and warnings
CocAction('checkJsonExtension')
" Validate JSON configuration syntax
" Returns: void (shows errors if any)
" Configuration debugging
:CocInfo // Show config and status info
:CocOpenLog // Open log file
:checkhealth coc // Health check (Neovim)Usage Examples:
" Validate configuration
function! ValidateConfig()
try
call CocAction('checkJsonExtension')
echo "Configuration is valid"
catch
echo "Configuration error: " . v:exception
endtry
endfunction
command! ValidateConfig call ValidateConfig()
" Debug configuration issues
function! DebugConfig()
echo "=== coc.nvim Configuration Debug ==="
echo "Config directory: " . coc#util#get_config_home()
echo "Service status: " . (coc#rpc#ready() ? "Ready" : "Not ready")
CocInfo
CocOpenLog
endfunction
command! DebugCoc call DebugConfig()