Editor integration and external tools
Neovim's native LSP client handles communication with language servers. Mason installs servers explicitly; nvim-cmp combines server completions with file paths and buffer words. Tree-sitter supplies buffer-level syntax highlighting independently of a language server.
You supply compilers, runtimes, and project dependencies. AutoVim's server installer does not replace language toolchains. Opening a file never starts a server download. Dashboard, picker, terminal, and tool buffers stay outside LSP attachment.
Languages and prerequisites
| Language | Install name / pinned version | Tools you provide |
|---|---|---|
| C / C++ | clangd / 23.1.0 | Compiler and build tools. |
| Assembly | asm_lsp / 0.10.1 | Rust/Cargo to build the server; your assembler. |
| Java | jdtls / v1.62.0 | JDK 21+; Python 3.9+ for the launcher. |
| Python | pyright / 1.1.414 | Node.js/npm and the Python project environment. |
| HTML | html / 4.10.0 | Node.js/npm. |
| CSS / SCSS / Less | cssls / 4.10.0 | Node.js/npm. |
| JS / TS / JSX / TSX | ts_ls / 6.0.2 | Node.js 22.22.2+ and npm. |
| Rust | rust_analyzer / 2026-10-19 | Rust/Cargo; rust-src for standard-library analysis. |
| Go | gopls / v0.23.0 | A Go toolchain compatible with that server version. |
| Zig | zls / 0.16.1 | A matching Zig toolchain. |
| Nim | nim_langserver / v1.16.0 | Nim, nimsuggest, and Nimble for dependencies. |
These are the pins in the alpha archive, not a claim that every language has been validated against every toolchain. See validation scope. Upstream requirements: jdtls and TypeScript server.
Installing servers
Install the prerequisite toolchains and restart Neovim to inherit their PATH. Then request the servers you need:
:LspInstall clangd
:LspInstall nim_langserver
" Install every configured server whose installer prerequisites are available:
:LspInstall allWith no argument, :LspInstall chooses the current file's server. Missing installer prerequisites skip the affected package and produce a message. :Mason shows progress; :MasonLog shows failures. Use :LspStart after installation if the file was already open.
Server pins live in lsp/servers.lua. The Mason registry snapshot is pinned to 2026-10-20-stark-key in lsp/installer.lua. Existing servers on PATH also work; their versions are managed by you.
Project roots and environments
Servers look for language build markers inside the explicit workspace boundary. Without an assigned workspace, AutoVim falls back through language markers, Git, and the file's directory. These roots never reassign the editor workspace.
- Files in one language project share a server process; different roots get separate clients.
- C/C++ needs
compile_commands.jsonorcompile_flags.txtfor accurate include paths, defines, and target flags. - Java uses a unique metadata directory per project.
- Python prefers project
.venv/orvenv/, then the activeVIRTUAL_ENV. - Assembly can use
.asm-lsp.tomlfor instruction-set and assembler choices. - Nim delegates analysis to
nimsuggest.
Diagnostics and navigation
Attached editing buffers receive definition, declaration, reference, implementation, type-definition, hover, signature, rename, code-action, formatting, diagnostic, and symbol-search mappings. A server must support an action to perform it.
Diagnostics use severity signs, underlines, and virtual text. Hover, signature help, and completion use bordered windows in the shared palette. Find all mappings in the key and command reference.
:LspInfo
:LspStart
:LspRestart:LspInfo shows availability, missing runtimes, and attached roots. Restarting a server reattaches its affected buffers. Formatting uses the attached server where supported; no separate formatter stack is installed.
Completion and snippets
Completion loads on Insert mode for editing buffers. Suggestions combine LSP, paths, and buffer words; buffer-word suggestions start after three characters. Nothing is selected automatically.
| Key | Behaviour |
|---|---|
| Tab / Shift-Tab | Next / previous item in a visible completion menu. |
| Enter | Accept the selected item; otherwise insert a newline. |
| Ctrl-Space | Request suggestions. |
| Ctrl-N / Ctrl-P | Next / previous completion item. |
| Ctrl-E | Cancel completion. |
| Ctrl-B / Ctrl-F | Scroll completion documentation up / down. |
With the menu closed, Tab first jumps to the next active snippet field. Otherwise it requests suggestions after non-whitespace text, or keeps indentation at the beginning of a line or after whitespace. Shift-Tab returns to the previous snippet field when available; snippet navigation also works in Select mode.
If no menu is visible: press Tab to open it, Tab again to select a suggestion, then Enter to accept.