无需插件配置Neovim与typescript-language-server、tsserver的问询
手动配置Neovim TSServer LSP(无需Mason/nvim-lspconfig)
核心疑问解答
是否应替换为typescript-language-server而非tsserver?
是,必须替换。tsserver是VSCode内置的TypeScript服务,并非标准LSP协议实现;typescript-language-server才是适配LSP规范的封装层,能和Neovim的LSP客户端正常通信。你更新后的cmd = {'typescript-language-server', '--stdio'}是正确的。是否缺少omnifunc配置?
是。<C-X><C-O>触发的是Vim的补全函数omnifunc,Neovim LSP不会自动绑定这个选项,必须手动设置缓冲区的omnifunc为LSP提供的补全函数。方向是否完全错误?
方向正确。直接调用vim.lsp.start()是Neovim原生LSP的手动启动方式,完全可以替代nvim-lspconfig的封装,只是缺了关键配置细节。
完整修正配置
你的配置需要补充两点:omnifunc绑定,以及root_dir的容错处理(避免找不到项目配置文件时崩溃)。建议结合自动命令,在TypeScript/JavaScript文件打开时触发LSP启动:
vim.api.nvim_create_autocmd('FileType', { pattern = {'typescript', 'javascript', 'typescriptreact', 'javascriptreact'}, callback = function() -- 查找项目根目录,找不到则用当前工作目录 local root_files = {'tsconfig.json', 'package.json', 'jsconfig.json'} local root_dir = vim.fs.dirname(vim.fs.find(root_files, {upward = true, stop = vim.env.HOME})[1] or vim.fn.getcwd()) vim.lsp.start({ name = 'tsserver', cmd = {'typescript-language-server', '--stdio'}, root_dir = root_dir, on_attach = function(client, bufnr) -- 绑定补全函数到当前缓冲区 vim.bo[bufnr].omnifunc = 'v:lua.vim.lsp.omnifunc' -- 可选:绑定常用LSP快捷键(示例) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {buffer = bufnr, silent = true}) vim.keymap.set('n', 'K', vim.lsp.buf.hover, {buffer = bufnr, silent = true}) end, }) end, })
前置检查
确保已全局安装依赖:
npm install -g typescript typescript-language-server
内容的提问来源于stack exchange,提问作者Christopher Francisco
相关产品推荐
相关产品推荐

