如何在Lua中同步调用函数?typescript.nvim连续执行异常求助
解决typescript.nvim连续操作执行不一致的问题
问题根源
你遇到的问题核心在于:这些TypeScript操作(添加缺失导入、移除未使用项等)依赖TS Language Server(tsserver)的文档解析与修改反馈,直接连续调用同步方法时,前一个操作触发的文档变更可能还没被tsserver完全处理,后续操作就基于旧的文档状态执行,导致部分操作未生效。
解决方案
改用同步串行执行每个LS命令,确保每个操作完成后再执行下一个,同时强制更新本地文档状态:
local ts = require("typescript") vim.api.nvim_create_autocmd("BufWritePre", { group = augroupTS, buffer = bufnr, callback = function() -- 获取当前buffer对应的tsserver客户端实例 local client = vim.lsp.get_active_clients({ name = "tsserver", bufnr = bufnr })[1] if not client then return end -- 按业务顺序定义要执行的TypeServer命令 local ts_commands = { "typescript.addMissingImports", "typescript.removeUnusedImports", "typescript.fixAll", "typescript.organizeImports", } for _, cmd in ipairs(ts_commands) do -- 同步发送请求,等待tsserver处理完成(超时1000ms) client.request_sync(cmd, { textDocument = vim.lsp.util.make_text_document_params(bufnr) }, 1000, bufnr) -- 强制更新本地文档,确保后续操作基于最新内容 vim.cmd("checktime") end end, })
额外优化建议
- 确保你的
typescript.nvim和tsserver均为最新版本,旧版本可能存在异步处理逻辑的bug。 - 如果仍有偶发失效问题,可在每个命令后添加短暂延迟,给tsserver足够的解析时间:
client.request_sync(...) vim.wait(50) -- 等待50ms vim.cmd("checktime")
内容的提问来源于stack exchange,提问作者zer09
相关产品推荐
相关产品推荐

