README.md
April 13, 2026 ยท View on GitHub
Requires Neovim 0.10+
Installation
Install this plugin using any plugin/package manager of your liking or see :h packages.
Configuration
Set up clangd via nvim-lspconfig / vim.lsp.config(), as usual.
You don't need to call require("clangd_extensions").setup() if you like the defaults:
require("clangd_extensions").setup({
ast = {
-- These are unicode, should be available in any font
role_icons = {
type = "๐ฃ",
declaration = "๐",
expression = "๐",
statement = ";",
specifier = "๐ข",
["template argument"] = "๐",
},
kind_icons = {
Compound = "๐ฒ",
Recovery = "๐
",
TranslationUnit = "๐
",
PackExpansion = "๐ฟ",
TemplateTypeParm = "๐
",
TemplateTemplateParm = "๐
",
TemplateParamObject = "๐
",
},
--[[ These require codicons (https://github.com/microsoft/vscode-codicons)
role_icons = {
type = "๎ญฃ",
declaration = "๎ช",
expression = "๎ฉฑ",
specifier = "๎ฎ",
statement = "๎ช",
["template argument"] = "๎ช",
},
kind_icons = {
Compound = "๎ช",
Recovery = "๎ช",
TranslationUnit = "๎ซฉ",
PackExpansion = "๎ฉผ",
TemplateTypeParm = "๎ช",
TemplateTemplateParm = "๎ช",
TemplateParamObject = "๎ช",
}, ]]
highlights = {
detail = "Comment",
},
},
memory_usage = {
border = "none",
},
symbol_info = {
border = "none",
},
})
Features
Switch Between Source / Header
Usage
:ClangdSwitchSourceHeader
View AST
You can fold nodes using zc and friends - the AST window has shiftwidth=2 and foldmethod=indent.

Usage
:ClangdAST to view the ast with the current line as the range, :'<,'>ClangdAST with a visual selection to view the ast with the selected lines as range.
See how ranges are handled at https://clangd.llvm.org/extensions#ast
Completion Scores
Usage with nvim-cmp:
local cmp = require "cmp"
cmp.setup {
-- ... rest of your `nvim-cmp` setup ...
sorting = {
comparators = {
cmp.config.compare.offset,
cmp.config.compare.exact,
cmp.config.compare.recently_used,
require("clangd_extensions.cmp_scores"),
cmp.config.compare.kind,
cmp.config.compare.sort_text,
cmp.config.compare.length,
cmp.config.compare.order,
},
},
}
Symbol Info

Usage
:ClangdSymbolInfo with the cursor at the desired symbol.
Type Hierarchy

Usage
:ClangdTypeHierarchy with the cursor over the desired type or a symbol of that type.
gd with the cursor over a type in a window to go to its definition.
Memory Usage
You can fold items using zc and friends - the memory usage window has shiftwidth=2 and foldmethod=indent.

Usage
:ClangdMemoryUsage. Preamble can be large so it is collapsed by default, to expand it use :ClangdMemoryUsage expand_preamble
Implementation status of extensions
- Memory usage
- AST
- Symbol info request
- Type hierarchy
- Switch between source/header
- File status (see
lsp-status.nvim) - Compilation commands (can be specified in either
vim.lsp.config()ornvim-lspconfigthroughinit_optionsandsettingsrespectively) - Code completion scores
- Force diagnostics generation (not sure)