Lobsters | 原文链接 | 2026-09-05 收录

Neovim 内置的 Lua 异步 API vim.async:等待而不阻塞事件循环

来源: neovim.io — 2026-09-04

概述

Neovim 官方 help 文档新增的一篇,介绍内置的结构化异步 API vim.async:它让 Lua 代码可以在等待定时器、回调和其它异步任务的同时,不阻塞 Nvim 的事件循环。异步工作运行在「任务(task)」里,任务可在检查点暂停、并在运行期间管理它所创建的子任务。用 vim.async.run() 启动异步工作,在任务内部用 vim.async.await() 等待回调式 API 或其它任务,用 pawait() 处理可能失败且当前任务应继续的等待。调度是协作式的:任务 await 定时器、I/O、回调或另一任务时,vim.async 会保存 Lua 栈并把控制权交还事件循环,让其它回调得以运行;同步 Lua 代码的栈帧永远不会被中途打断。子任务失败若未处理会连坐父任务,也可用 Task:detach() 让后台工作脱离父任务继续运行。

核心要点

金句

vim.async lets Lua code wait for timers, callbacks, and other tasks without blocking Nvim's event loop.(vim.async 让 Lua 代码在等待定时器、回调与其它任务时不阻塞 Nvim 的事件循环。)
返回 Lobsters 首页