类 NeovimClient

Neovim API

继承关系 (查看全部)

构造函数

属性

Buffer: typeof Buffer = Buffer
Tabpage: typeof Tabpage = Tabpage
Window: typeof Window = Window
_isReady: Promise<boolean> = ...
client: any
data?: number | Buffer
logger: Logger
prefix: string = 'nvim_'
requestQueue: any[]
transport: Transport
captureRejectionSymbol: typeof captureRejectionSymbol
captureRejections: boolean

设置或获取所有发射器的默认 captureRejection 值。

defaultMaxListeners: number
errorMonitor: typeof errorMonitor

此符号用于安装仅用于监控 'error' 事件的监听器。使用此符号安装的监听器会在调用常规 'error' 监听器之前被调用。

使用此符号安装监听器不会改变 'error' 事件发出后的行为,因此如果未安装常规 'error' 监听器,进程仍会崩溃。

访问器

  • get buffers(): Promise<Buffer[]>
  • 获取当前缓冲区句柄列表

    包括未列出的(未加载/已删除)缓冲区,例如 ls!。使用 buffer.loaded 检查缓冲区是否已加载

    返回 Promise<Buffer[]>

    缓冲区句柄列表

  • get colorMap(): Promise<{
        [name: string]: number;
    }>
  • 获取定义的颜色映射

    返回 Promise<{
        [name: string]: number;
    }>

    颜色映射

  • get mode(): Promise<{
        blocking: boolean;
        mode: string;
    }>
  • 获取当前模式。 |mode()| "blocking" 为 true 表示 Nvim 正在等待输入。

    返回 Promise<{
        blocking: boolean;
        mode: string;
    }>

    模式信息

  • get namespaces(): Promise<{
        [name: string]: number;
    }>
  • getNamespaces() 的别名

    返回 Promise<{
        [name: string]: number;
    }>

  • get runtimePaths(): Promise<string[]>
  • 获取 "runtimepath" 中包含的路径

    返回 Promise<string[]>

    路径列表

  • 获取 uis(): Promise<Ui[]>
  • 获取一个表示附加的 UI 的字典列表。

    返回 Promise<Ui[]>

    UI 字典数组 每个字典包含以下键: "height" UI 请求的高度 "width" UI 请求的宽度 "rgb" UI 是否使用 RGB 颜色(false 意味着 cterm 颜色) "ext_..." 请求的 UI 扩展,参见 |ui-options| "chan" 远程 UI 的通道 ID(在 TUI 中不存在)

方法

  • emitter.on(eventName, listener) 的别名。

    参数

    • eventName: string | symbol
    • listener: ((...args: any[]) => void)
        • (...args): void
        • 参数

          • Rest...args: any[]

          返回 void

    返回 this

    v0.1.26

  • 将 msgpack 附加到读/写流 *

    参数

    • __namedParameters: {
          reader: ReadableStream;
          writer: WritableStream;
      }
      • reader: ReadableStream
      • writer: WritableStream

    返回 void

  • 使用给定的参数调用 VimL 函数。

    执行错误时:以 VimL 错误失败,不会更新 v:errmsg。

    参数

    • fname: string
    • args: VimValue | VimValue[] = []

    返回 Promise<any>

  • 以原子方式调用多个 API 方法。

    这有两种主要用途

    • 从异步上下文以原子方式执行多个请求,即不交错重绘、来自其他客户端的 RPC 请求或用户交互(但是 API 方法可能会触发具有此类副作用的自动命令或事件处理,例如 |:sleep| 可能会唤醒计时器)

    • 为了最小化一系列请求的 RPC 开销(往返次数)。

    参数

    • calls: VimValue[]

    返回 Promise<[any[], boolean]>

  • 使用给定的参数调用 VimL |Dictionary-function|。

    执行错误时:以 VimL 错误失败,不会更新 v:errmsg。

    参数

    • dict: object
    • fname: string
    • args: VimValue | VimValue[] = []

    返回 object

  • 执行 ex 命令并返回其(非错误)输出。Shell |:!| 输出不会被捕获。

    执行错误时:以 VimL 错误失败,不会更新 v:errmsg。

    参数

    • arg: string

    返回 Promise<string>

  • 创建一个新的命名空间,或获取一个现有的命名空间。

    命名空间用于缓冲区高亮和虚拟文本,请参见 |nvim_buf_add_highlight()| 和 |nvim_buf_set_virtual_text()|。

    命名空间可以是命名的或匿名的。如果 name 匹配现有命名空间,则返回关联的 id。如果 name 是一个空字符串,则创建一个新的匿名命名空间。

    参数

    • name: string = ''

      命名空间名称或空字符串

    返回 Promise<number>

    命名空间 ID

  • 同步调用为名为 eventName 的事件注册的每个监听器,按注册顺序,将提供的参数传递给每个监听器。

    如果事件有监听器,则返回 true,否则返回 false

    const EventEmitter = require('events');
    const myEmitter = new EventEmitter();

    // First listener
    myEmitter.on('event', function firstListener() {
    console.log('Helloooo! first listener');
    });
    // Second listener
    myEmitter.on('event', function secondListener(arg1, arg2) {
    console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
    });
    // Third listener
    myEmitter.on('event', function thirdListener(...args) {
    const parameters = args.join(', ');
    console.log(`event with parameters ${parameters} in third listener`);
    });

    console.log(myEmitter.listeners('event'));

    myEmitter.emit('event', 1, 2, 3, 4, 5);

    // Prints:
    // [
    // [Function: firstListener],
    // [Function: secondListener],
    // [Function: thirdListener]
    // ]
    // Helloooo! first listener
    // event with parameters 1, 2 in second listener
    // event with parameters 1, 2, 3, 4, 5 in third listener

    参数

    • eventName: string | symbol
    • Rest...args: any[]

    返回 boolean

    v0.1.26

  • 评估 VimL 表达式 (:help expression)。字典和列表将递归地扩展。在 VimL 错误时:返回一个通用错误;v:errmsg 不会更新。

    参数

    • expr: string

    返回 Promise<VimValue>

  • 返回一个数组,列出发射器已注册监听器的事件。数组中的值是字符串或Symbol

    const EventEmitter = require('events');
    const myEE = new EventEmitter();
    myEE.on('foo', () => {});
    myEE.on('bar', () => {});

    const sym = Symbol('symbol');
    myEE.on(sym, () => {});

    console.log(myEE.eventNames());
    // Prints: [ 'foo', 'bar', Symbol(symbol) ]

    返回 (string | symbol)[]

    v6.0.0

  • 将输入键发送到 Nvim,受mode 标志控制的各种怪癖的影响。这是一个阻塞调用,与 |nvim_input()| 不同。

    在执行错误时:不会失败,但会更新 v:errmsg。

    参数

    • keys: string

      待输入

    • mode: string

      行为标志,参见 |feedkeys()|

    • escapeCsi: boolean

      如果为真,则在 keys 中转义 K_SPECIAL/CSI 字节

    返回 Promise<any>

  • 获取缓冲区局部 |user-commands| 的映射。

    参数

    • options: {} = {}

      可选参数(目前未使用)

      返回 Promise<Command>

      描述命令的映射的映射

    • 按名称或 ID 获取高亮显示

      参数

      • nameOrId: string | number

        名称或 ID

      • isRgb: boolean = true

        应导出 RGB 颜色

      返回 void | Promise<object>

      高亮显示定义映射

    • 通过 id 获取高亮定义 |hlID()|

      参数

      • id: number

        由 |hlID()| 返回的高亮 id

      • isRgb: boolean = true

        应导出 RGB 颜色

      返回值 Promise<object>

      高亮显示定义映射

    • 获取全局(非缓冲区局部) |mapping| 定义列表。

      参数

      • mode: string

        模式简称 ("n", "i", "v", ...)

      返回值 Promise<object[]>

      描述映射的 maparg() 类字典数组。 "buffer" 键始终为零。

    • 返回 EventEmitter 的当前最大监听器值,该值由 emitter.setMaxListeners(n) 设置或默认为 defaultMaxListeners

      返回值 number

      v1.0.0

    • 将原始用户输入加入队列。与 |nvim_feedkeys()| 不同,此方法使用低级输入缓冲区,调用是非阻塞的(输入由事件循环异步处理)。

      在执行错误时:不会失败,但会更新 v:errmsg。

      注意:|keycodes| 像被翻译,所以“<” 是特殊的。要输入一个字面意义上的“<” ,请发送.

      注意:对于鼠标事件,请使用 |nvim_input_mouse()|。伪键形式“<col,row>” 自 |api-level| 6 起已弃用。

      参数

      • keys: string

        待输入

      返回 Promise<number>

    • 从 GUI 发送鼠标事件。

      调用是非阻塞的。它不等待任何结果操作,而是将事件排队以供事件循环尽快处理。

      注意:目前不支持通过在循环中多次调用此方法来“脚本化”多个鼠标事件:中间鼠标位置将被忽略。它应该用于在 GUI 中实现实时鼠标输入。已弃用的伪键形式(“<col,row>”)的 |nvim_input()| 具有相同的限制。

      参数

      • button: string

        鼠标按钮:其中之一为 "left"、"right"、"middle"、"wheel"。

      • action: string

        对于普通按钮,其中之一为 "press"、"drag"、"release"。对于滚轮,其中之一为 "up"、"down"、"left"、"right"。

      • modifier: string

        每个修饰符由单个字符表示的字符串。与按键相同,使用相同的规范,但“-” 分隔符是可选的,所以 "C-A-"、"c-a" 和 "CA" 都可以用来指定 Ctrl+Alt+单击。

      • grid: number

        如果客户端使用 |ui-multigrid|,则为网格编号,否则为 0。

      • row: number

        鼠标行位置(以零为基准,就像重绘事件一样)

      • col: number

        鼠标列位置(以零为基准,就像重绘事件一样)

      返回 Promise<any>

    • 返回监听名为 eventName 的事件的监听器数量。

      参数

      • eventName: string | symbol

        正在监听的事件的名称

      返回值 number

      v3.2.0

    • 返回名为 eventName 的事件的监听器数组的副本。

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ]

      参数

      • eventName: string | symbol

      返回 Function[]

      v0.1.26

    • emitter.removeListener() 的别名。

      参数

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v10.0.0

    • listener 函数添加到名为 eventName 的事件的监听器数组的末尾。不会进行任何检查以查看是否已添加 listener。多次调用传递相同组合的 eventNamelistener 将导致 listener 被添加和调用多次。

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      默认情况下,事件监听器按添加顺序调用。emitter.prependListener() 方法可以用作替代方法,将事件监听器添加到监听器数组的开头。

      const myEE = new EventEmitter();
      myEE.on('foo', () => console.log('a'));
      myEE.prependListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v0.1.101

    • 为名为 eventName 的事件添加一次性listener 函数。下次触发 eventName 时,此监听器将被移除,然后被调用。

      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      默认情况下,事件监听器按添加顺序调用。emitter.prependOnceListener() 方法可以用作替代方法,将事件监听器添加到监听器数组的开头。

      const myEE = new EventEmitter();
      myEE.once('foo', () => console.log('a'));
      myEE.prependOnceListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v0.3.0

    • listener 函数添加到名为 eventName 的事件的侦听器数组的_开头_。不会进行任何检查以查看 listener 是否已添加。多次调用传递相同组合的 eventNamelistener 将导致 listener 被添加和调用多次。

      server.prependListener('connection', (stream) => {
      console.log('someone connected!');
      });

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v6.0.0

    • 为名为 eventName 的事件添加一个_一次性_ listener 函数到侦听器数组的_开头_。下次触发 eventName 时,此侦听器将被删除,然后调用。

      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      参数

      • eventName: string | symbol

        事件的名称。

      • listener: ((...args: any[]) => void)

        回调函数

          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v6.0.0

    • 返回名为 eventName 的事件的侦听器数组的副本,包括任何包装器(例如由 .once() 创建的包装器)。

      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log');

      参数

      • eventName: string | symbol

      返回 Function[]

      v9.4.0

    • 删除所有侦听器,或指定 eventName 的侦听器。

      删除在代码的其他地方添加的侦听器是一种不好的做法,尤其是在 EventEmitter 实例由其他组件或模块创建时(例如套接字或文件流)。

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      参数

      • Optionalevent: string | symbol

      返回 this

      v0.1.26

    • 从名为 eventName 的事件的侦听器数组中删除指定的 listener

      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback);

      removeListener() 最多会从侦听器数组中删除 listener 的一个实例。如果某个 listener 已多次添加到指定 eventName 的侦听器数组中,那么必须多次调用 removeListener() 来删除每个实例。

      事件发出后,在发出时附加到该事件的所有侦听器将按顺序调用。这意味着在发出和最后一个侦听器完成执行_之后_,任何 removeListener()removeAllListeners() 调用_之前_,都不会从正在进行的 emit() 中删除它们。后续事件的行为将按预期进行。

      const myEmitter = new MyEmitter();

      const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
      };

      const callbackB = () => {
      console.log('B');
      };

      myEmitter.on('event', callbackA);

      myEmitter.on('event', callbackB);

      // callbackA removes listener callbackB but it will still be called.
      // Internal listener array at time of emit [callbackA, callbackB]
      myEmitter.emit('event');
      // Prints:
      // A
      // B

      // callbackB is now removed.
      // Internal listener array [callbackA]
      myEmitter.emit('event');
      // Prints:
      // A

      因为侦听器是使用内部数组管理的,所以调用此方法会更改_在_要删除的侦听器_之后_注册的任何侦听器的职位索引。这不会影响侦听器调用的顺序,但这意味着 emitter.listeners() 方法返回的侦听器数组的任何副本都需要重新创建。

      当单个函数已多次作为处理程序添加到单个事件中时(如以下示例所示),removeListener() 将删除最近添加的实例。在示例中,将删除 once('ping') 侦听器。

      const ee = new EventEmitter();

      function pong() {
      console.log('pong');
      }

      ee.on('ping', pong);
      ee.once('ping', pong);
      ee.removeListener('ping', pong);

      ee.emit('ping');
      ee.emit('ping');

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      参数

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • 参数

            • Rest...args: any[]

            返回 void

      返回 this

      v0.1.26

    • 将终端代码和 |keycodes|(, , ...)替换为字符串中的内部表示。

      参数

      • str: string

        要转换的字符串。

      • fromPart: boolean

        遗留 Vim 参数。通常为 true。

      • doIt: boolean

        还翻译。如果 special 为 false,则忽略。

      • special: boolean

        替换 |keycodes|,例如变为 "\n" 字符。

      返回 Promise<string>

    • 在补全弹出菜单中选择一个项目。

      如果 |ins-completion| 未激活,此 API 调用将被静默忽略。对使用 |ui-popupmenu| 控制弹出菜单的外部 UI 很有用。也可以在映射中使用;使用|:map-cmd| 确保映射不会结束补全模式。

      参数

      • item: number

        要选择的项目的索引(从零开始)。值为 -1 表示不选择任何内容并恢复原始文本。

      • insert: boolean

        是否应将选择插入缓冲区。

      • finish: boolean

        完成补全并关闭弹出菜单。意味着 insert

      • opts: object = {}

        可选参数。为将来使用保留。

      返回 Promise<any>

    • 为 nvim 识别客户端。可以多次调用,但后续调用将删除之前的 info,如果该 info 仍然有效,则应重新发送。(如果库首先识别了 channel,而使用该库的插件稍后覆盖了该 info,则可能会发生这种情况)

      参数

      • name: string
      • version: object
      • type: string
      • methods: object
      • attributes: object

      返回 void

    • 默认情况下,EventEmitter 将在为特定事件添加超过 10 个监听器时打印警告。这是一个有用的默认值,有助于查找内存泄漏。emitter.setMaxListeners() 方法允许修改此特定 EventEmitter 实例的限制。该值可以设置为 Infinity(或 0)来表示无限数量的监听器。

      返回对 EventEmitter 的引用,以便可以将调用链接起来。

      参数

      • n: number

      返回 this

      v0.3.5

    • 告诉 Nvim 调整网格大小。使用请求的网格大小触发 grid_resize 事件,如果超出大小限制,则使用最大大小。

      如果网格句柄无效,则会发生错误。

      参数

      • grid: number

        要更改的网格的句柄

      • width: number

        新请求的宽度

      • height: number

        新请求的高度

      返回 Promise<void>

    • 返回名为 eventName 的事件的监听器数组的副本。

      对于 EventEmitter,这与在发射器上调用 .listeners 的行为完全相同。

      对于 EventTarget,这是获取事件目标的事件监听器的唯一方法。 这对于调试和诊断目的很有用。

      const { getEventListeners, EventEmitter } = require('events');

      {
      const ee = new EventEmitter();
      const listener = () => console.log('Events are fun');
      ee.on('foo', listener);
      getEventListeners(ee, 'foo'); // [listener]
      }
      {
      const et = new EventTarget();
      const listener = () => console.log('Events are fun');
      et.addEventListener('foo', listener);
      getEventListeners(et, 'foo'); // [listener]
      }

      参数

      • emitter: EventEmitter | DOMEventTarget
      • name: string | symbol

      返回 Function[]

      v15.2.0

    • 一个类方法,返回在给定 emitter 上注册的给定 eventName 的监听器数量。

      const { EventEmitter, listenerCount } = require('events');
      const myEmitter = new EventEmitter();
      myEmitter.on('event', () => {});
      myEmitter.on('event', () => {});
      console.log(listenerCount(myEmitter, 'event'));
      // Prints: 2

      参数

      • emitter: EventEmitter

        要查询的发射器

      • eventName: string | symbol

        事件名称

      返回值 number

      v0.9.12

      从 v3.2.0 开始 - 使用 listenerCount 代替。

    • const { on, EventEmitter } = require('events');

      (async () => {
      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo')) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
      })();

      返回一个 AsyncIterator,它迭代 eventName 事件。 如果 EventEmitter 发出 'error',它将抛出。 它在退出循环时删除所有监听器。 每次迭代返回的 value 是一个数组,由发出的事件参数组成。

      可以使用 AbortSignal 取消等待事件

      const { on, EventEmitter } = require('events');
      const ac = new AbortController();

      (async () => {
      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo', { signal: ac.signal })) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
      })();

      process.nextTick(() => ac.abort());

      参数

      • emitter: EventEmitter
      • eventName: string

        正在监听的事件的名称

      • Optionaloptions: StaticEventEmitterOptions

      返回 AsyncIterableIterator<any>

      它迭代 emitter 发出的 eventName 事件

      v13.6.0, v12.16.0

    • 创建一个 Promise,当 EventEmitter 发出给定事件时,该 Promise 将被兑现,或者如果 EventEmitter 在等待时发出 'error',则该 Promise 将被拒绝。 该 Promise 将使用发出给定事件的所有参数的数组解析。

      此方法有意地是通用的,并且与 Web 平台 EventTarget 接口一起使用,该接口没有特殊的 'error' 事件语义,也不监听 'error' 事件。

      const { once, EventEmitter } = require('events');

      async function run() {
      const ee = new EventEmitter();

      process.nextTick(() => {
      ee.emit('myevent', 42);
      });

      const [value] = await once(ee, 'myevent');
      console.log(value);

      const err = new Error('kaboom');
      process.nextTick(() => {
      ee.emit('error', err);
      });

      try {
      await once(ee, 'myevent');
      } catch (err) {
      console.log('error happened', err);
      }
      }

      run();

      'error' 事件的特殊处理仅在使用 events.once() 等待另一个事件时使用。 如果使用 events.once() 来等待 'error' 事件本身,则将其视为任何其他类型的事件,没有特殊处理。

      const { EventEmitter, once } = require('events');

      const ee = new EventEmitter();

      once(ee, 'error')
      .then(([err]) => console.log('ok', err.message))
      .catch((err) => console.log('error', err.message));

      ee.emit('error', new Error('boom'));

      // Prints: ok boom

      可以使用 AbortSignal 取消等待事件

      const { EventEmitter, once } = require('events');

      const ee = new EventEmitter();
      const ac = new AbortController();

      async function foo(emitter, event, signal) {
      try {
      await once(emitter, event, { signal });
      console.log('event emitted!');
      } catch (error) {
      if (error.name === 'AbortError') {
      console.error('Waiting for the event was canceled!');
      } else {
      console.error('There was an error', error.message);
      }
      }
      }

      foo(ee, 'foo', ac.signal);
      ac.abort(); // Abort waiting for the event
      ee.emit('foo'); // Prints: Waiting for the event was canceled!

      参数

      • emitter: NodeEventTarget
      • eventName: string | symbol
      • Optionaloptions: StaticEventEmitterOptions

      返回 Promise<any[]>

      v11.13.0, v10.16.0

    • 参数

      • emitter: DOMEventTarget
      • eventName: string
      • Optionaloptions: StaticEventEmitterOptions

      返回 Promise<any[]>