You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需插件配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:10:56