Loading repository data…
Loading repository data…
beamiter / repository
Rust-powered LSP client for Vim, inspired by coc.nvim
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
SimpleCC is a Vim 9 Language Server Protocol client with a small Rust daemon and a native Vim9 UI. The daemon owns language-server processes and JSON-RPC traffic; Vim handles completion, diagnostics, navigation, edits, snippets, inlay hints, semantic tokens, code lenses, and hierarchy views.
The managed language-server installer targets Linux and macOS on x86_64 and aarch64. Other systems may still use a manually built daemon and servers already available on PATH, but are not currently covered by CI.
With vim-plug:
Plug 'beamiter/simplecc', { 'do': './install.sh' }
Run :PlugInstall, or rebuild an existing checkout:
cd ~/.vim/plugged/simplecc
./install.sh
For a manual package installation:
git clone https://github.com/beamiter/simplecc.git \
~/.vim/pack/plugins/start/simplecc
~/.vim/pack/plugins/start/simplecc/install.sh
The installer performs a reproducible cargo build --release --locked, stages the daemon, verifies it, and atomically replaces lib/simplecc-daemon. To keep the daemon elsewhere:
let g:simplecc_daemon_path = '/absolute/path/to/simplecc-daemon'
For example:
:SimpleCCInstall rust-analyzer
:SimpleCCRestart
If a server is already installed system-wide, no managed installation is needed. SimpleCC resolves managed installations first and then searches PATH.
Set an explicit configuration before the plugin loads:
let g:simplecc_config_path = expand('~/.config/simplecc/simplecc.json')
Without an explicit path, SimpleCC searches in this order:
Open or create the active project configuration with :SimpleCCConfig. :SimpleCCReloadConfig validates the replacement file and hot-pushes settings to servers that are already running. Changes to command, args, filetypes, rootPatterns, priority, or initializationOptions require :SimpleCCRestart. Invalid JSON is reported and does not silently replace the running configuration.
Minimal configuration:
{
"languageServers": {
"rust-analyzer": {
"command": "rust-analyzer",
"args": [],
"filetypes": ["rust"],
"rootPatterns": ["Cargo.toml"],
"priority": 100,
"initializationOptions": {},
"settings": {}
}
}
}
Each language-server entry supports:
See simplecc.json.example for all built-in server examples, including Julia settings.
| Language | Default server | Managed install | External prerequisite |
|---|---|---|---|
| Rust | rust-analyzer | yes | none |
| C and C++ | clangd | yes | none |
| Python | pyright-langserver | yes | Node.js and npm |
| Go | gopls | yes | Go |
| Lua | lua-language-server | yes | none |
| Julia | LanguageServer.jl | yes | Julia |
| TypeScript and JavaScript | typescript-language-server | yes | Node.js and npm |
Install TypeScript support through SimpleCC:
:SimpleCCInstall typescript-language-server
List managed servers with :SimpleCCServers. Install one with :SimpleCCInstall {name}. Managed installs may contact GitHub, npm, the Go module proxy, or Julia package registries.
| Command | Action |
|---|---|
| :SimpleCC | Show daemon, project, and server status |
| :SimpleCCStart | Start and initialize SimpleCC |
| :SimpleCCStop | Shut down SimpleCC and its servers |
| :SimpleCCRestart | Restart the daemon |
| :SimpleCCConfig | Open or create the active configuration |
| :SimpleCCReloadConfig | Validate configuration and hot-reload server settings |
| :SimpleCCLog | Open the in-memory SimpleCC log |
| :SimpleCCInstall [server] | Install a managed language server |
| :SimpleCCServers | List managed server installation state |
| Command | Action |
|---|---|
| :SimpleCCHover | Show hover documentation |
| :SimpleCCDefinition | Go to definition |
| :SimpleCCReferences | List references |
| :SimpleCCImplementation | Go to implementation |
| :SimpleCCTypeDef | Go to type definition |
| :SimpleCCOutline | Show document symbols |
| :SimpleCCWorkspaceSymbol [query] | Search workspace symbols |
| :SimpleCCWorkspaceSymbolLive | Open live workspace-symbol search |
| :SimpleCCHighlight | Highlight references under the cursor |
| :SimpleCCHighlightClear | Clear document highlights |
| :SimpleCCIncomingCalls | Show incoming calls |
| :SimpleCCOutgoingCalls | Show outgoing calls |
| :SimpleCCSupertypes | Show supertypes |
| :SimpleCCSubtypes | Show subtypes |
| Command | Action |
|---|---|
| :SimpleCCRename | Rename the symbol under the cursor |
| :SimpleCCFormat | Format the current buffer |
| :SimpleCCAction | Select a code action |
| :SimpleCCSignatureHelp | Show signature help |
| :SimpleCCInlayHints | Toggle inlay hints |
| :SimpleCCSelExpand | Expand the current selection |
| :SimpleCCSelShrink | Shrink the current selection |
| :SimpleCCSemanticTokens | Refresh semantic tokens |
| :SimpleCCCodeLens | Display code lenses |
| :SimpleCCCodeLensRun | Execute a code lens |
| :SimpleCCFold | Apply server-provided folding ranges |
| Command | Action |
|---|---|
| :SimpleCCDiagnostics | Put diagnostics in the quickfix list |
| :SimpleCCNextDiag | Jump to the next diagnostic |
| :SimpleCCPrevDiag | Jump to the previous diagnostic |
| :SimpleCCPullDiag | Request pull diagnostics |
| :SimpleCCJuliaActivate [dir] | Activate a Julia environment |
| :SimpleCCJuliaRefresh | Refresh LanguageServer.jl caches |
Set let g:simplecc_no_default_maps = 1 before loading the plugin to disable all default mappings.
| Mapping | Action |
|---|---|
| gd | Definition |
| gr | References |
| K | Hover |
| gi | Implementation |
| gy | Type definition |
| <leader>rn | Rename |
| <leader>ca | Code action |
| <leader>f | Format |
| <leader>o | Document outline |
| <leader>ih | Toggle inlay hints |
| [d / ]d | Previous / next diagnostic |
| Insert-mode Tab, Shift-Tab, arrows, Enter | Navigate and accept completion |
Set options before plugin/simplecc.vim is loaded.
| Option | Default | Purpose |
|---|---|---|
| g:simplecc_auto_start | 1 | Start on VimEnter |
| g:simplecc_no_default_maps | 0 | Disable built-in mappings |
| g:simplecc_config_path | empty | Explicit configuration path |
| g:simplecc_daemon_path | empty | Explicit daemon executable |
| g:simplecc_auto_complete | 1 | Enable automatic completion |
| g:simplecc_change_delay | 120 | Document-change debounce in ms |
| g:simplecc_complete_delay | 80 | Completion debounce in ms |
| g:simplecc_complete_min_chars | 1 | Minimum typed characters |
| g:simplecc_complete_max_items | 100 | Maximum completion items |
| g:simplecc_complete_resolve_delay | 120 | Resolve debounce in ms |
| g:simplecc_complete_buffer_words | 1 | Supplement LSP with keyword matches from open buffers |
| g:simplecc_complete_buffer_max_items | 20 | Max buffer-word candidates per menu |
| g:simplecc_sign_error | E> | Error sign text |
| g:simplecc_sign_warn | W> | Warning sign text |
| g:simplecc_sign_info | I> | Information sign text |
| g:simplecc_sign_hint | H> | Hint sign text |
| g:simplecc_auto_install | 0 | Install missing managed servers without prompting |
| g:simplecc_inlay_hints | 1 | Enable inlay hints |
| g:simplecc_virtual_diag | 1 | Enable virtual diagnostic text |
| g:simplecc_diag_max_per_line | 3 | Virtual diagnostics per line |
| g:simplecc_diag_float |
Run ./install.sh, confirm lib/simplecc-daemon is executable, or set g:simplecc_daemon_path to an absolute executable path.
Check the executable directly, for example rust-analyzer --version. Use :SimpleCCInstall for a managed server, then :SimpleCCRestart. Inspect :SimpleCCLog for startup errors.
Validate the JSON and save it. Use :SimpleCCReloadConfig for settings-only changes; use :SimpleCCRestart for server command, arguments, initialization, routing, root-pattern, or priority changes. Check :SimpleCCLog if loading fails. An explicit g:simplecc_config_path takes precedence over discovered files.
Confirm :SimpleCC reports a ready daemon, the current &filetype appears in the server configuration, and the server starts successfully. Use :SimpleCCRestart after changing server executables.
Julia
| 0 |
| Show diagnostics near the cursor |
| g:simplecc_diag_min_severity | 4 | Include severities up to this value: 1 error, 4 hint |
| g:simplecc_semantic_tokens | 0 | Enable automatic semantic tokens |
| g:simplecc_semtok_priority | 100 | Semantic-token property priority |
| g:simplecc_semtok_range_threshold | 5000 | Use range requests above this line count |
| g:simplecc_pull_diagnostics | 0 | Enable pull diagnostics |
| g:simplecc_status | empty | Current statusline-friendly state |