Nvim msgpack API client and remote plugin provider for Node.js
The Neovim and NeovimClient classes provide comprehensive access to all Neovim API operations including command execution, expression evaluation, buffer/window/tabpage management, UI operations, and event subscriptions.
Extended Neovim class with connection management, returned by attach().
/**
* Extended Neovim class that manages the RPC connection lifecycle.
* Includes all Neovim class functionality plus connection management.
*/
class NeovimClient extends Neovim {
/** Channel ID for this client connection */
channelId: Promise<number>;
/** Whether API metadata has been loaded */
isApiReady: boolean;
/** Static references to entity classes */
static Buffer: typeof Buffer;
static Window: typeof Window;
static Tabpage: typeof Tabpage;
/**
* Attaches msgpack transport to read/write streams.
* Called internally by attach() function.
*
* @param reader - Input stream
* @param writer - Output stream
*/
attach({ reader, writer }: { reader: NodeJS.ReadableStream; writer: NodeJS.WritableStream }): void;
/**
* Checks if a buffer has event listeners attached.
*
* @param buffer - Buffer to check
* @returns true if buffer has active listeners
*/
isAttached(buffer: Buffer): boolean;
/**
* Attaches an event listener to a buffer.
*
* @param buffer - Buffer to attach to
* @param eventName - Event name (e.g., 'lines', 'changedtick')
* @param cb - Callback function
* @returns Detach function
*/
attachBuffer(buffer: Buffer, eventName: string, cb: Function): Function;
/**
* Detaches an event listener from a buffer.
*
* @param buffer - Buffer to detach from
* @param eventName - Event name
* @param cb - Callback function
* @returns true if listener was found and removed
*/
detachBuffer(buffer: Buffer, eventName: string, cb: Function): boolean;
/**
* Closes the RPC connection.
*/
close(): Promise<void>;
/**
* Async disposal support for using statement (Node.js 20+).
*/
[Symbol.asyncDispose](): Promise<void>;
}Usage Examples:
import { attach } from 'neovim';
import * as child_process from 'node:child_process';
const nvim_proc = child_process.spawn('nvim', ['--embed']);
const nvim = attach({ proc: nvim_proc });
// Get channel ID
const chanId = await nvim.channelId;
console.log('Connected via channel:', chanId);
// Check if API is ready
console.log('API ready:', nvim.isApiReady);
// Close connection
await nvim.close();
// Or use async disposal (Node.js 20+)
{
await using nvim = attach({ proc: nvim_proc });
await nvim.command('echo "Auto-disposed!"');
}Main API class providing access to all Neovim operations.
/**
* Main API class for interacting with Neovim.
* Extends BaseApi and EventEmitter.
*/
class Neovim {
/** Reference to Buffer class */
static Buffer: typeof Buffer;
/** Reference to Window class */
static Window: typeof Window;
/** Reference to Tabpage class */
static Tabpage: typeof Tabpage;
// API Information
/** Neovim API metadata (channel ID and API info) */
apiInfo: Promise<[number, ApiInfo]>;
// Buffer Management
/** All buffer handles */
buffers: Promise<Buffer[]>;
/** Current buffer (getter/setter) */
buffer: AsyncBuffer;
// Window Management
/** All window handles */
windows: Promise<Window[]>;
/** Current window (getter/setter) */
window: AsyncWindow;
// Tabpage Management
/** All tabpage handles */
tabpages: Promise<Tabpage[]>;
/** Current tabpage (getter/setter) */
tabpage: AsyncTabpage;
// Channel Management
/** All open channels */
chans: Promise<Channel[]>;
// Command Management
/** Buffer-local user commands */
commands: Promise<Record<string, any>>;
// Runtime Configuration
/** Paths in 'runtimepath' option */
runtimePaths: Promise<string[]>;
/** Set global working directory (setter only) */
dir: string;
// Editor State
/** Current line (getter/setter) */
line: string | Promise<string>;
/** Current mode and blocking status */
mode: Promise<{ mode: string; blocking: boolean }>;
// Colors and UI
/** Map of defined colors */
colorMap: Promise<{ [name: string]: number }>;
/** List of attached UIs */
uis: Promise<Ui[]>;
// Namespaces
/** All namespaces */
namespaces: Promise<{ [name: string]: number }>;
// Inherited from BaseApi
/**
* Compare with another API object.
*
* @param other - Object to compare
* @returns true if objects are equal
*/
equals(other: any): boolean;
/**
* Send RPC request to Neovim.
*
* @param name - API method name
* @param args - Method arguments
* @returns Response from Neovim
*/
request(name: string, args?: any[]): Promise<any>;
/**
* Send notification to Neovim (non-blocking).
*
* @param name - Notification name
* @param args - Notification arguments
*/
notify(name: string, args: any[]): void;
/**
* Get global variable (g:var).
*
* @param name - Variable name
* @returns Variable value
*/
getVar(name: string): Promise<VimValue>;
/**
* Set global variable (g:var).
*
* @param name - Variable name
* @param value - Variable value
*/
setVar(name: string, value: VimValue): Promise<void>;
/**
* Delete global variable (g:var).
*
* @param name - Variable name
*/
deleteVar(name: string): Promise<void>;
/**
* Get global option.
*
* @param name - Option name
* @returns Option value
*/
getOption(name: string): Promise<VimValue>;
/**
* Set global option.
*
* @param name - Option name
* @param value - Option value
*/
setOption(name: string, value: VimValue): Promise<void>;
}
type VimValue = number | boolean | string | number[] | { [key: string]: any };
type AsyncBuffer = Promise<Buffer> & Omit<Buffer, 'id' | 'isAttached'>;
type AsyncWindow = Promise<Window> & Omit<Window, 'id'>;
type AsyncTabpage = Promise<Tabpage>;
interface ApiInfo {
version: { major: number; minor: number; patch: number };
functions: any[];
ui_events: any[];
types: any[];
error_types: any[];
[key: string]: any;
}
interface Channel {
id: number;
stream: string;
mode: string;
[key: string]: any;
}
type Ui = UiAttachOptions & {
height: number;
width: number;
chan?: number;
}
interface Command {
name: string;
nargs: string;
range: string;
bang: boolean;
bar: boolean;
register: boolean;
definition: string;
script_id: number;
complete?: string | null;
addr?: any;
count?: any;
complete_arg?: any;
}Execute Vim ex-commands and get output.
/**
* Execute an ex-command.
*
* @param arg - Ex-command string
* @returns Command result
*/
command(arg: string): Promise<any>;
/**
* Execute ex-command and capture output.
*
* @param arg - Ex-command string
* @returns Command output as string
*/
commandOutput(arg: string): Promise<string>;
/**
* Get user-defined commands.
*
* @param options - Optional filter options
* @returns Map of command name to command info
*/
getCommands(options?: object): Promise<Record<string, any>>;Usage Examples:
// Execute commands
await nvim.command('vsp');
await nvim.command('set number');
await nvim.command('e ~/file.txt');
// Get command output
const output = await nvim.commandOutput('ls');
console.log('Buffers:', output);
const version = await nvim.commandOutput('version');
console.log(version);
// Get user commands
const commands = await nvim.commands;
console.log('Available commands:', Object.keys(commands));
const allCommands = await nvim.getCommands();
console.log('All commands:', allCommands);Evaluate VimL expressions, execute Lua code, and call functions.
/**
* Evaluate a VimL expression.
*
* @param expr - VimL expression
* @returns Expression result
*/
eval(expr: string): Promise<VimValue>;
/**
* Execute Lua code in Neovim.
*
* @param code - Lua code string
* @param args - Arguments passed to Lua code
* @returns Lua execution result
*/
lua(code: string, args?: VimValue[]): Promise<VimValue>;
/**
* Execute Lua code (alias for lua()).
*
* @param code - Lua code string
* @param args - Arguments passed to Lua code
* @returns Lua execution result
*/
executeLua(code: string, args?: VimValue[]): Promise<VimValue>;
/**
* Call a VimL function.
*
* @param fname - Function name
* @param args - Function arguments
* @returns Function result
*/
call(fname: string, args?: VimValue | VimValue[]): Promise<any>;
/**
* Call a VimL function (alias for call()).
*
* @param fname - Function name
* @param args - Function arguments
* @returns Function result
*/
callFunction(fname: string, args?: VimValue | VimValue[]): Promise<any>;
/**
* Call a VimL dictionary function.
*
* @param dict - Dictionary object
* @param fname - Function name
* @param args - Function arguments
* @returns Function result
*/
callDictFunction(dict: object, fname: string, args?: VimValue | VimValue[]): Promise<object>;
/**
* Call multiple API methods atomically.
* Either all succeed or all fail.
*
* @param calls - Array of [method, args] tuples
* @returns [results, error_occurred]
*/
callAtomic(calls: VimValue[]): Promise<[any[], boolean]>;Usage Examples:
// Evaluate VimL expressions
const winCount = await nvim.eval('winnr("$")');
console.log('Window count:', winCount);
const bufName = await nvim.eval('bufname("%")');
console.log('Current buffer:', bufName);
// Execute Lua code
await nvim.lua('print("Hello from Lua!")');
const luaResult = await nvim.lua('return ... * 2', [21]);
console.log('Lua result:', luaResult); // 42
await nvim.lua(`
vim.api.nvim_buf_set_lines(0, 0, 1, false, {"Line from Lua"})
`);
// Call VimL functions
const lineCount = await nvim.call('line', ['$']);
console.log('Lines:', lineCount);
const expandedPath = await nvim.call('expand', ['%:p']);
console.log('Full path:', expandedPath);
const files = await nvim.call('glob', ['*.js', false, true]);
console.log('JS files:', files);
// Call multiple operations atomically
const [results, hasError] = await nvim.callAtomic([
['nvim_command', ['vsp']],
['nvim_command', ['enew']],
['nvim_buf_set_lines', [0, 0, -1, false, ['Line 1', 'Line 2']]]
]);
if (!hasError) {
console.log('All operations succeeded');
}Create and manage buffers.
/**
* Create a new buffer.
*
* @param listed - Whether buffer appears in buffer list
* @param scratch - Whether buffer is scratch (no file, no undo)
* @returns New buffer handle
*/
createBuffer(listed: boolean, scratch: boolean): Promise<Buffer | number>;
/**
* Get all buffers (same as buffers getter).
*
* @returns Array of buffer handles
*/
getBuffers(): Promise<Buffer[]>;Usage Examples:
// Create buffers
const scratchBuf = await nvim.createBuffer(false, true);
const normalBuf = await nvim.createBuffer(true, false);
// Get all buffers
const allBuffers = await nvim.buffers;
console.log('Buffer count:', allBuffers.length);
for (const buf of allBuffers) {
const name = await buf.name;
const lineCount = await buf.length;
console.log(`Buffer ${buf.id}: ${name} (${lineCount} lines)`);
}
// Set current buffer
const firstBuf = allBuffers[0];
nvim.buffer = firstBuf;
// Get current buffer
const currentBuf = await nvim.buffer;
await currentBuf.append(['New line']);Create and manage windows.
/**
* Open a new window (floating or external).
*
* @param buffer - Buffer to display in window
* @param enter - Whether to enter the window
* @param options - Window configuration
* @returns New window handle
*/
openWindow(buffer: Buffer, enter: boolean, options: OpenWindowOptions): Promise<Window | number>;
/**
* Configure window layout and position.
*
* @param window - Window to configure
* @param options - Configuration options
* @returns Configuration result
*/
windowConfig(window: Window, options?: object): any;
/**
* Close a window.
*
* @param window - Window to close
* @param force - Force close even if buffer has unsaved changes
* @returns Close result
*/
windowClose(window: Window, force: boolean): any;
/**
* Get all windows.
*
* @returns Array of window handles
*/
getWindows(): Promise<Window[]>;
/**
* Get current window.
*
* @returns Current window handle
*/
getWindow(): AsyncWindow;
/**
* Set current window.
*
* @param win - Window to make current
*/
setWindow(win: Window): Promise<void>;
interface OpenWindowOptions {
external?: boolean;
focusable?: boolean;
width?: number;
height?: number;
bufpos?: [number, number];
row?: number;
col?: number;
anchor?: string;
relative?: string;
style?: string;
border?: string | string[];
}Usage Examples:
// Get all windows
const windows = await nvim.windows;
console.log('Window count:', windows.length);
// Set current window
const firstWin = windows[0];
await nvim.setWindow(firstWin);
// Get current window
const currentWin = await nvim.window;
const [height, width] = await Promise.all([currentWin.height, currentWin.width]);
console.log(`Window size: ${width}x${height}`);
// Open floating window
const buf = await nvim.createBuffer(false, true);
const floatWin = await nvim.openWindow(buf, true, {
relative: 'editor',
width: 50,
height: 10,
row: 5,
col: 10,
anchor: 'NW',
style: 'minimal',
border: 'rounded'
});
// Configure window
await nvim.windowConfig(floatWin, {
relative: 'editor',
width: 60,
height: 15,
row: 10,
col: 20
});
// Close window
await nvim.windowClose(floatWin, false);Manage tabpages.
// All tabpage properties and methods are accessed via the Tabpage class
// See Window and Tabpage Operations documentationUsage Examples:
// Get all tabpages
const tabpages = await nvim.tabpages;
console.log('Tabpage count:', tabpages.length);
// Get current tabpage
const currentTab = await nvim.tabpage;
const tabNum = await currentTab.number;
console.log('Current tabpage:', tabNum);
// Set current tabpage
nvim.tabpage = tabpages[0];
// Get windows in tabpage
const tabWindows = await currentTab.windows;
console.log('Windows in tabpage:', tabWindows.length);Manipulate the current line.
/**
* Get the current line.
*
* @returns Current line text
*/
getLine(): Promise<string>;
/**
* Set the current line.
*
* @param line - New line text
*/
setLine(line: string): Promise<any>;
/**
* Delete the current line.
*/
deleteCurrentLine(): Promise<any>;Usage Examples:
// Get current line
const currentLine = await nvim.line;
console.log('Current line:', currentLine);
// Set current line
nvim.line = 'New line content';
// Delete current line
await nvim.deleteCurrentLine();
// Using methods
const line = await nvim.getLine();
await nvim.setLine('Modified: ' + line);Get and set Vim variables.
/**
* Get a v: variable (Vim predefined variable).
*
* @param name - Variable name (without v: prefix)
* @returns Variable value
*/
getVvar(name: string): Promise<VimValue>;
/**
* Set a v: variable.
*
* @param name - Variable name (without v: prefix)
* @param value - Variable value
*/
setVvar(name: string, value: VimValue): Promise<void>;Usage Examples:
// Get v: variables
const count = await nvim.getVvar('count');
const register = await nvim.getVvar('register');
const errMsg = await nvim.getVvar('errmsg');
console.log('Count:', count);
console.log('Register:', register);
console.log('Last error:', errMsg);
// Set v: variables
await nvim.setVvar('errmsg', 'Custom error');
await nvim.setVvar('count', 42);
// Global variables (g:)
await nvim.setVar('my_global_var', 'hello');
const myVar = await nvim.getVar('my_global_var');
console.log('My var:', myVar);
await nvim.deleteVar('my_global_var');Send input to Neovim.
/**
* Send input keys to Neovim (blocking).
* Keys are processed as if typed by user.
*
* @param keys - Key sequence
* @param mode - Mode flags ('n', 'v', 'i', 'm', 't', etc.)
* @param escapeCsi - Whether to escape CSI bytes
*/
feedKeys(keys: string, mode: string, escapeCsi: boolean): Promise<any>;
/**
* Queue raw user input (non-blocking).
*
* @param keys - Input string
* @returns Number of bytes written
*/
input(keys: string): Promise<number>;
/**
* Send mouse event to Neovim.
*
* @param button - Mouse button ('left', 'right', 'middle', 'wheel')
* @param action - Mouse action ('press', 'drag', 'release')
* @param modifier - Modifier keys (empty string for none)
* @param grid - Grid number
* @param row - Row position
* @param col - Column position
*/
inputMouse(button: string, action: string, modifier: string, grid: number, row: number, col: number): Promise<any>;Usage Examples:
// Feed keys (blocking)
await nvim.feedKeys('i', 'n', true); // Enter insert mode
await nvim.feedKeys('Hello', 'm', true); // Type text
await nvim.feedKeys('\\<Esc>', 'n', true); // Exit insert mode
// Input (non-blocking)
await nvim.input('iHello World');
await nvim.input('\\<Esc>');
// Mouse input
await nvim.inputMouse('left', 'press', '', 1, 10, 20);
await nvim.inputMouse('left', 'release', '', 1, 10, 20);Write to Neovim's output and error buffers.
/**
* Write to output buffer (does not append newline).
*
* @param str - String to write
*/
outWrite(str: string): Promise<any>;
/**
* Write line to output buffer (appends newline).
*
* @param str - String to write
*/
outWriteLine(str: string): Promise<any>;
/**
* Write to error buffer (does not append newline).
*
* @param str - Error message
*/
errWrite(str: string): Promise<any>;
/**
* Write line to error buffer (appends newline).
*
* @param str - Error message
*/
errWriteLine(str: string): Promise<any>;Usage Examples:
// Output messages
await nvim.outWrite('Processing...');
await nvim.outWriteLine(' done!');
// Error messages
await nvim.errWrite('Error: ');
await nvim.errWriteLine('Something went wrong!');Query keymaps and highlights.
/**
* Get global key mappings for a mode.
*
* @param mode - Mode ('n', 'v', 'i', 'x', etc.)
* @returns Array of mapping objects
*/
getKeymap(mode: string): Promise<object[]>;
/**
* Get color value by name.
*
* @param name - Color name
* @returns RGB color value
*/
getColorByName(name: string): Promise<number>;
/**
* Get highlight definition by name or ID.
*
* @param nameOrId - Highlight group name or ID
* @param isRgb - Return RGB colors instead of cterm colors
* @returns Highlight definition
*/
getHighlight(nameOrId: string | number, isRgb?: boolean): Promise<object> | void;
/**
* Get highlight definition by name.
*
* @param name - Highlight group name
* @param isRgb - Return RGB colors
* @returns Highlight definition
*/
getHighlightByName(name: string, isRgb?: boolean): Promise<object>;
/**
* Get highlight definition by ID.
*
* @param id - Highlight ID
* @param isRgb - Return RGB colors
* @returns Highlight definition
*/
getHighlightById(id: number, isRgb?: boolean): Promise<object>;Usage Examples:
// Get keymaps
const normalMaps = await nvim.getKeymap('n');
console.log('Normal mode mappings:', normalMaps);
// Get colors
const redValue = await nvim.getColorByName('Red');
console.log('Red color value:', redValue);
const colorMap = await nvim.colorMap;
console.log('All colors:', colorMap);
// Get highlights
const normalHl = await nvim.getHighlightByName('Normal', true);
console.log('Normal highlight:', normalHl);
const commentHl = await nvim.getHighlightById(1, true);
console.log('Comment highlight:', commentHl);Query process information.
/**
* Get information about a process.
*
* @param pid - Process ID
* @returns Process information
*/
getProc(pid: number): Promise<Proc>;
/**
* Get child processes of a process.
*
* @param pid - Parent process ID
* @returns Array of child process info
*/
getProcChildren(pid: number): Promise<Proc[]>;
interface Proc {
pid: number;
ppid: number;
name: string;
[key: string]: any;
}Usage Examples:
// Get process info
const nvimProc = await nvim.getProc(process.pid);
console.log('Process:', nvimProc);
// Get child processes
const children = await nvim.getProcChildren(process.pid);
console.log('Child processes:', children);Parse expressions and manipulate strings.
/**
* Parse a VimL expression into AST.
*
* @param expr - VimL expression
* @param flags - Parser flags
* @param highlight - Include highlight info
* @returns AST representation
*/
parseExpression(expr: string, flags: string, highlight: boolean): Promise<object>;
/**
* Replace terminal codes in string.
*
* @param str - String with terminal codes
* @param fromPart - From special codes
* @param doIt - Execute the codes
* @param special - Special mode
* @returns String with codes replaced
*/
replaceTermcodes(str: string, fromPart: boolean, doIt: boolean, special: boolean): Promise<string>;
/**
* Calculate display width of string.
*
* @param str - String to measure
* @returns Display width in cells
*/
strWidth(str: string): Promise<number>;Usage Examples:
// Parse expression
const ast = await nvim.parseExpression('2 + 2', '', false);
console.log('AST:', ast);
// Replace terminal codes
const withCodes = await nvim.replaceTermcodes('<C-W>v', true, true, true);
console.log('Replaced:', withCodes);
// String width
const width = await nvim.strWidth('Hello 世界');
console.log('Display width:', width);Attach and manage UI interfaces.
/**
* Attach a UI to Neovim.
*
* @param width - UI width in cells
* @param height - UI height in cells
* @param options - UI capabilities and options
*/
uiAttach(width: number, height: number, options: UiAttachOptions): Promise<void>;
/**
* Detach the UI.
*/
uiDetach(): Promise<void>;
/**
* Try to resize the UI.
*
* @param width - New width
* @param height - New height
*/
uiTryResize(width: number, height: number): Promise<void>;
/**
* Try to resize a specific grid.
*
* @param grid - Grid number
* @param width - New width
* @param height - New height
*/
uiTryResizeGrid(grid: number, width: number, height: number): Promise<void>;
/**
* Set a UI option.
*
* @param name - Option name
* @param value - Option value
*/
uiSetOption(name: string, value: any): Promise<void>;
interface UiAttachOptions {
rgb?: boolean;
override?: boolean;
ext_cmdline?: boolean;
ext_hlstate?: boolean;
ext_linegrid?: boolean;
ext_messages?: boolean;
ext_multigrid?: boolean;
ext_popupmenu?: boolean;
ext_tabline?: boolean;
ext_termcolors?: boolean;
ext_wildmenu?: boolean;
}Usage Examples:
// Attach UI (for building custom Neovim UIs)
await nvim.uiAttach(80, 24, {
rgb: true,
ext_linegrid: true,
ext_multigrid: true
});
// Handle UI events
nvim.on('redraw', (events) => {
for (const [name, ...args] of events) {
console.log('UI event:', name, args);
}
});
// Resize UI
await nvim.uiTryResize(100, 30);
// Detach UI
await nvim.uiDetach();
// Get attached UIs
const uis = await nvim.uis;
console.log('Attached UIs:', uis);Subscribe to Neovim events.
/**
* Subscribe to event broadcasts from Neovim.
*
* @param event - Event name
*/
subscribe(event: string): Promise<void>;
/**
* Unsubscribe from event broadcasts.
*
* @param event - Event name
*/
unsubscribe(event: string): Promise<void>;Usage Examples:
// Subscribe to events
await nvim.subscribe('BufEnter');
await nvim.subscribe('VimLeave');
// Handle events (using EventEmitter interface)
nvim.on('notification', (method, args) => {
console.log('Notification:', method, args);
});
// Unsubscribe
await nvim.unsubscribe('BufEnter');Create and manage namespaces for highlights and virtual text.
/**
* Create or get a namespace.
*
* @param name - Namespace name (optional, generates ID if not provided)
* @returns Namespace ID
*/
createNamespace(name?: string): Promise<number>;
/**
* Get all namespaces.
*
* @returns Map of namespace name to ID
*/
getNamespaces(): Promise<{ [name: string]: number }>;Usage Examples:
// Create namespaces
const ns1 = await nvim.createNamespace('my-plugin');
const ns2 = await nvim.createNamespace(); // Anonymous namespace
// Get all namespaces
const namespaces = await nvim.namespaces;
console.log('Namespaces:', namespaces);
// Use namespace for highlights
const buf = await nvim.buffer;
await buf.addHighlight({
hlGroup: 'Error',
line: 0,
colStart: 0,
colEnd: 5,
srcId: ns1
});
// Clear namespace
await buf.clearNamespace({ nsId: ns1 });Control completion popup menu.
/**
* Select an item in the completion popup menu.
*
* @param item - Item index (-1 to select original text)
* @param insert - Insert selected text
* @param finish - Finish completion
* @param opts - Additional options
*/
selectPopupmenuItem(item: number, insert: boolean, finish: boolean, opts?: object): Promise<any>;Usage Examples:
// Select completion item
await nvim.selectPopupmenuItem(0, true, false);
// Select and finish
await nvim.selectPopupmenuItem(1, true, true);
// Cancel completion (select original)
await nvim.selectPopupmenuItem(-1, false, true);Set client information.
/**
* Identify this client to Neovim.
*
* @param name - Client name
* @param version - Version object
* @param type - Client type ('remote', 'embedder', 'host', 'plugin')
* @param methods - Exposed RPC methods
* @param attributes - Client attributes
*/
setClientInfo(name: string, version: object, type: string, methods: object, attributes: object): void;Usage Examples:
// Set client info
nvim.setClientInfo(
'my-app',
{ major: 1, minor: 0, patch: 0 },
'remote',
{},
{ website: 'https://example.com' }
);
// Get API info (includes client channel)
const [channelId, apiInfo] = await nvim.apiInfo;
console.log('Channel:', channelId);
console.log('API version:', apiInfo.version);Get channel information.
/**
* Get information about a channel.
*
* @param chan - Channel ID
* @returns Channel information
*/
getChanInfo(chan: number): Promise<Channel>;Usage Examples:
// Get current channel
const channelId = await nvim.channelId;
const chanInfo = await nvim.getChanInfo(channelId);
console.log('This channel:', chanInfo);
// Get all channels
const allChans = await nvim.chans;
console.log('All channels:', allChans);
for (const chan of allChans) {
console.log('Channel:', chan);
}Quit Neovim.
/**
* Quit Neovim.
* Sends quit command to Neovim instance.
*/
quit(): void;Usage Examples:
// Quit Neovim
nvim.quit();
// Wait for process to exit
nvim_proc.on('exit', (code) => {
console.log('Neovim exited with code:', code);
});Neovim class extends EventEmitter - you can listen to 'notification' and other eventsbuffer, window, line return Promises when accessed as gettersbuffer = buf, window = win, line = "text" also trigger async operationsAsyncBuffer, AsyncWindow, AsyncTabpage types for properties that return promisified entitiesNeovimClient class adds connection management on top of NeovimcallAtomic() for batch operations that should succeed or fail togetherInstall with Tessl CLI
npx tessl i tessl/npm-neovim