Open-Source Wikis

/

Neovim

/

Neovim

/

Glossary

neovim/neovim

Glossary

Terms that appear in the Neovim source tree and that often need explaining.

Editor concepts (inherited from Vim)

Buffer. The in-memory representation of a file. A buffer has lines, options, marks, undo history, and (optionally) is associated with a file on disk. Defined by buf_T in src/nvim/buffer_defs.h.

Window. A view onto a buffer. Multiple windows can show the same buffer. Defined by win_T in src/nvim/buffer_defs.h.

Tab page. A collection of windows. The :tabnew command opens a new tab page. Defined by tabpage_T.

Autocmd / autocommand / editor event. A user-defined command that fires on a named event (BufRead, TextChanged, ...). Implemented in src/nvim/autocmd.c; events are listed in src/nvim/auevents.lua.

Ex command. Anything you can type after :. Listed in src/nvim/ex_cmds.lua; dispatched by do_one_cmd() in src/nvim/ex_docmd.c.

Vimscript. Vim's legacy scripting language, alias "VimL" or "eval expression language". Lives under src/nvim/eval/ and src/nvim/eval.c. The grammar is defined in src/nvim/viml/.

Mark. A named cursor position. Lowercase marks (az) are buffer-local; uppercase marks (AZ) are global. Implemented in src/nvim/mark.c.

Register. A named buffer for yanked/deleted text. Implemented in src/nvim/register.c.

Mode. Normal, Insert, Visual, Operator-pending, Command-line, Terminal, ... Stored in the global State variable; transitions go through state_enter() in src/nvim/state.c.

Operator-pending. The state after pressing an operator like d or y but before the motion. Handled inside Normal mode (src/nvim/normal.c).

Quickfix list / location list. A list of file:line:message entries (e.g., compiler errors). Implemented in src/nvim/quickfix.c.

Fold. A collapsible range of lines. Implemented in src/nvim/fold.c.

Sign. A glyph drawn in the sign column next to a line. Implemented in src/nvim/sign.c (legacy) and now mostly through extmarks (src/nvim/extmark.c).

Tag. A named symbol from a tags file (Ctags-style). Implemented in src/nvim/tag.c.

Neovim-specific concepts

Extmark / extended mark. A robust mark that can carry highlight, virtual text, sign, and conceal data. Survives buffer changes by being stored in a per-buffer marktree. Implemented in src/nvim/extmark.c and src/nvim/marktree.c. The public API is vim.api.nvim_buf_set_extmark().

Marktree. The data structure that stores extmarks: a B+-tree of (row, col) keyed entries with O(log n) shift on insertions. src/nvim/marktree.c (~75k lines including the B+-tree implementation).

Memline. Vim's persistent line storage: lines are kept in a tree of disk-backed pages so editing huge files doesn't blow up memory. src/nvim/memline.c and src/nvim/memfile.c.

Shada ("shared data"). The successor to Vim's viminfo. A msgpack-encoded file that persists registers, marks, search history, jumplist, and command-line history across sessions and across multiple concurrent Nvim instances. src/nvim/shada.c.

TUI. The built-in terminal UI client that renders to the user's terminal emulator. Lives in src/nvim/tui/ and is started automatically by the binary in terminal mode.

Embedded mode (--embed). Start the server without a built-in TUI, expecting a UI on stdin/stdout. The flag a GUI like Neovide uses to spawn a Neovim core.

Headless mode (--headless). Like --embed but no UI is required at all. Used by tests and for batch scripts.

RPC channel. A msgpack-rpc connection to the editor. Channels can be stdin/stdout, a TCP socket, a Unix socket, a Windows named pipe, or stdio of a child process spawned with jobstart({rpc = true}). Implemented in src/nvim/msgpack_rpc/channel.c and src/nvim/api/private/.

API function. A C function in src/nvim/api/*.c whose name starts with nvim_. The dispatcher (gen_api_dispatch.lua) auto-generates the wiring so that the function is callable over RPC and from Lua as vim.api.nvim_….

API-fast (api-fast). An API function annotated as safe to call from any context, including arbitrary Lua callbacks. Fast functions cannot trigger os_breakcheck() or yield.

vim.* (the Lua stdlib). The Lua API exposed to plugins, in runtime/lua/vim/. Top-level submodules include vim.api, vim.lsp, vim.treesitter, vim.diagnostic, vim.pack, vim.fs, vim.ui, vim.iter, vim.uv, vim.system.

VIMRUNTIME. The directory containing the runtime files (runtime/ in this repo). Set automatically when nvim is installed, but you must set it yourself when running an in-source build.

stdpath(). Lua/Vimscript helper that returns XDG-style standard paths: config, data, cache, state, log, run. Backed by src/nvim/os/stdpaths.c.

Provider. A bridge to a host-language runtime that supports Vim plugins not yet ported to Lua. Examples: Python (pynvim), Ruby, Node.js, Perl. See runtime/lua/vim/provider/.

vim-patch. A commit prefix and workflow for porting changes from upstream Vim. See runtime/doc/dev_vimpatch.txt and vim_patches.yml workflow.

Implementation building blocks

libuv. Cross-platform async I/O library. Backbone of the event loop. Vendored as a CMake fetch, not in-tree.

LuaJIT. The Lua interpreter shipped in the binary. Vendored as a CMake fetch.

luv. Lua bindings to libuv, exposed as vim.uv. Vendored as LUV_URL in cmake.deps/deps.txt.

lpeg. PEG library used to implement vim.lpeg and the LuaCATS grammar.

libvterm. In-tree fork (src/nvim/vterm/) of the libvterm terminal-emulator-as-buffer library used by :terminal.

unibilium. Terminfo parser used by the TUI (src/nvim/tui/terminfo.c).

termkey. Vendored input parser that turns escape sequences into key events (src/nvim/tui/termkey/).

tree-sitter. Incremental parser library. Used for :syntax replacements and for general parsing in plugins. Bindings live in src/nvim/lua/treesitter.c plus runtime/lua/vim/treesitter/.

msgpack. Binary serialization format used for the RPC protocol and the shada file. Vendored at src/mpack/.

typval_T. The Vimscript variant value type: number, float, string, list, dict, blob, funcref, partial. Defined in src/nvim/eval/typval_defs.h. Conversions to/from the API Object type live in src/nvim/eval/typval.c and to/from Lua values in src/nvim/lua/converter.c.

Object. The API's variant value type. Defined in src/nvim/api/private/defs.h. Used for everything that crosses the C↔Lua and C↔RPC boundaries.

MultiQueue. A multi-producer queue with a "child queue" hierarchy, used by the event loop to route events to the right worker. src/nvim/event/multiqueue.c.

StringBuilder. Append-only growable string buffer. src/nvim/lib/.

kvec. Macro-based dynamic vector library, vendored from klib. Use it for most lists.

garray. Older growable-array helper that predates kvec. Still pervasive; new code should prefer kvec or StringBuilder.

queue. "Intrusive" linked list (src/nvim/lib/queue_defs.h). Use only when an intrusive list is genuinely needed.

tv_*. Functions that operate on Vimscript typval_T values.

f_*. Vimscript built-in functions (e.g., f_searchpos, f_chansend).

api_*. Internal helpers in src/nvim/api/private/.

nlua_*. Functions in the Lua bridge (src/nvim/lua/).

os_*. Platform-abstraction helpers in src/nvim/os/.

ex_*. Implementations of Ex commands.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Glossary – Neovim wiki | Factory