如何通过 TRAMP 使用 clangd 配置 emacs lsp-mode?

Dav*_*ene 8 emacs

我正在尝试配置 lsp-mode 以处理通过 TRAMP 打开的远程文件。文档根本没有谈论这个,但是根据我从各种搜索中收集到的信息,我拼凑了这个:

(use-package lsp-mode
  :commands lsp
  :straight t
  :config
  (progn
    (add-hook 'prog-mode-hook #'lsp)
    (lsp-register-client
     (make-lsp-client :new-connection (lsp-tramp-connection
                                       "/path/to/clangd")
                      :major-modes '(c-mode c++-mode)
                      :remote? t
                      :server-id 'clangd-remote))))

(use-package lsp-ui
  :commands lsp-ui-mode
  :straight t)

(use-package company-lsp
  :commands company-lsp
  :straight t)
Run Code Online (Sandbox Code Playgroud)

但是在打开文件时,lsp-mode 报告 clangd 退出:

LSP :: clangd-remote has exited (exited abnormally with code 127)
Server clangd-remote:32027 status:starting exited with status exit. Do 
you want to restart it? (y or n) n
Run Code Online (Sandbox Code Playgroud)

我猜 clangd 从未真正启动过,但我不知道出了什么问题。我的配置通常是否正确?lsp-mode 有我可以启用的任何调试输出吗?

Dan*_*ele 2

这是我的配置,看起来很有效(我也在移动我的第一步)

(use-package lsp-mode
  :hook ((prog-mode . lsp-deferred))
  :commands (lsp lsp-deferred)
  :config
  (progn
    (lsp-register-client
     (make-lsp-client :new-connection (lsp-tramp-connection "clangd")
                      :major-modes '(c-mode c++-mode)
                      :remote? t
                      :server-id 'clangd-remote))))
Run Code Online (Sandbox Code Playgroud)

这个想法是将 emacs 注册为 LSP 的客户端。我通过 TRAMP 连接到已安装 clangd 的 WSL2。

我的真正目标是设置一个 LSP 来编辑 PHP 代码,利用 Serenata 或其他东西。但我仍然不知道如何同时注册多个客户,因此任何建议将不胜感激。

是的,文档肯定应该改进,或者至少他们应该添加一个论坛来留下一些问题。