lsp-bridge -- 速度最快的语法补全插件

我发现如果使用的是multi-server, 其中一个server没安装所以启动失败的话, 那么之后的server也就不会启动了. 比如这次我启动的是 typescript_emmet_tailwindcss 三个server

[lsp-bridge-multi-server]
project_path : "/Users/liuyinz/code/react/stock_filter"
file_path    : "/Users/liuyinz/code/react/stock_filter/app/root.tsx"
file_ext     : "tsx"
start_server : "typescript_emmet_tailwindcss"

[lsp-bridge-get-id]
project_path : "/Users/liuyinz/code/react/stock_filter"
file_path    : "/Users/liuyinz/code/react/stock_filter/app/root.tsx"
file_ext     : "tsx"
start_server : "tailwindcss"
lang_id      : "typescriptreact"

[lsp-bridge-get-id]
project_path : "/Users/liuyinz/code/react/stock_filter"
file_path    : "/Users/liuyinz/code/react/stock_filter/app/root.tsx"
file_ext     : "tsx"
start_server : "typescript-ls"
lang_id      : "typescriptreact"

[lsp-bridge-get-id]
project_path : "/Users/liuyinz/code/react/stock_filter"
file_path    : "/Users/liuyinz/code/react/stock_filter/app/root.tsx"
file_ext     : "tsx"
start_server : "emmet-ls"
lang_id      : "typescriptreact"

但是由于tailwindcss server没有安装, 所以只启动了 typescript-ls, 连 emmet-ls 也没有启动,等到我安装好tailwindcss server, 一切就全成功了, 我想这多server应该是互相独立的才对, 这算bug吗? @manateelazycat

lsp-bridge远程不会卡的,如果卡就是你的配置会有影响, 可以 emacs -Q 排查一下

如果是多个服务器,目前的设计就是所有服务器都要启动才可以,只有局部服务器启动理论上也是可以工作的,但是这种假装工作,反而会带来更多的困惑。

当你,如果你觉得默认的多服务器太多了,可以自己fork一个 json 配置放到自定义目录哈, 这样不用改 lsp-bridge 代码就可以实现精确的控制多服务器的配合。

用emacs -Q启动裸的lsp-bridge也会卡,并且用其他的语言lsp server也不会出现

不要用 pylsp 这种落后的 python lsp server, 用 basedpyright 多好。

basedpyright默认使用了

即使项目文件超级多,也不会索引文件导致补全卡,其他 python lsp server 应该没有这样的设计

1 个赞

好久没上论坛了,最近合并了社区大佬的补丁,现在 lsp-bridge 支持顶部面包屑导航的功能了,大家可以更新到最新版体验一下。

4 个赞

只是debug用,我平常也是pyright

是不是还要加个tsx

文档上有写关于这个的https://github.com/manateelazycat/lsp-bridge#:~:text=Note%3A%20Some%20advanced,meet%20this%20requirement. 你可以检查一下,看看可不可以满足你的需求,可以查看一下lsp-bridge 中的lsp-bridge–get-language-id-func然后自己定制lsp-bridge-get-language-id ,应该就可以满足你的需求,再查看一下 https://github.com/tailwindlabs/tailwindcss-intellisense/blob/816a175fa499281aee5de1a24d000a676f1b99a6/packages/tailwindcss-language-service/src/util/languages.ts#L57, 遇到tsx 应当返回typescriptreact,然后自定一下这个lsp-bridge-get-language-id,大概的代码应该为

(setq lsp-bridge-get-language-id
      (lambda (project-path file-path server-name extension-name)
        (when (string-equal server-name "tailwindcss")
          (cond
           ;; 处理 TypeScript 文件
           ((or (string-equal extension-name "ts")
                (string-equal extension-name "tsx"))
            "typescript")
           ;; 处理 TypeScript React 文件
           ((string-equal extension-name "tsx")
            "typescriptreact")
           ;; 处理 JavaScript React 文件
           ((string-equal extension-name "jsx")
            "javascriptreact")
           ;; 处理普通的 JavaScript 文件
           ((string-equal extension-name "js")
            "javascript")
           ;; 处理 Svelte 文件
           ((string-equal extension-name "svelte")
            "svelte")
           ;; 处理 Vue 文件
           ((string-equal extension-name "vue")
            "vue")
           ;; 默认情况,返回扩展名本身
           (t extension-name)))))

  (setq lsp-bridge-multi-lang-server-extension-list
        '(
          ;; (("jsx"). "typescript_tailwindcss")
          ;; (("html"). "html_emmet")
          (("tsx"). "tsx_tailwindcss")
          ))

然后再写一个,自己定义一个tsx_tailwindcss.json 就可以了

是的,tailwindcss是动态根据前端项目返回不同的language id,这个id要对,要不不会补全。

languageId 已经修改为了typescriptreact 但tailwindcss没有返回提示,这该如何排查

你还需要

(setq lsp-bridge-multi-lang-server-extension-list
        '(
          ;; (("jsx"). "typescript_tailwindcss")
          ;; (("html"). "html_emmet")
          (("tsx"). "tsx_tailwindcss")
          ))

需要有一个自定义tsx_tailwindcss.json 文件,放在multiserver/目录下,大概这样

{
  "completion": ["typescript","tailwindcss"],
  "completion_item_resolve": ["typescript","tailwindcss"],
  "diagnostics": ["typescript", "tailwindcss"],
  "code_action": ["typescript", "tailwindcss"],
  "execute_command": ["typescript", "tailwindcss"],
  "find_define": "typescript",
  "find_type_define": "typescript",
  "find_implementation": "typescript",
  "find_references": "typescript",
  "peek_find_definition": "typescript",
  "peek_find_references": "typescript",
  "formatting": "typescript",
  "hover": "typescript",
  "signature_help": "typescript",
  "prepare_rename": "typescript",
  "rename": "typescript",
  "document_symbol": "typescript",
  "workspace_symbol": "typescript",
  "semantic_tokens": "typescript",
  "inlay_hint": "typescript",
  "imenu": "typescript"
}

你也可以自己定义,加上emmet-ls 等,支持多个lsp,你看看是不是这个问题

这些都做了,现在是vue项目有tailwindcss提示,tsx没有tailwindcss提示(之前languageId不对改了后还是没有提示出来) 日志有请求有返回,编辑器上没有弹出层

查看一下这个https://github.com/manateelazycat/lsp-bridge/issues/1153,我不知道这个是什么问题,可能有关吧,需要开启 (setq lsp-bridge-enable-completion-in-string t),你再试试,如果还有问题,你可以新建一个测试项目吗。

(setq lsp-bridge-enable-completion-in-string t) 设置这个显示提示了 :folded_hands:

1 个赞

大家又遇到吗?

Mac下,最新的git代码编译的 emacs 补全窗口显示不全。 配置文件没有改动。 GNU Emacs 31.0.50 (build 1, aarch64-apple-darwin25.2.0, NS appkit-2685.30 Version 26.2 (Build 25C56)) of 2026-01-01

正常应该这样:

才测试,可以的

我也遇到了这个问题, 刚编译的 emacs-plus@31

GNU Emacs 31.0.50 (build 1, aarch64-apple-darwin25.1.0, NS appkit-2685.20 Version 26.1 (Build 25B78)) of 2026-01-10

估计是Emacs本身的bug吧

有使用 default-frame-alist 设置 frame 最大化吗?