本人Emacs新人,debug功底薄弱,最近配置lsp-bridge(目前主要是用pyright)遇到了一些问题无法解决,来社区请教各位大佬。
目前已经基本排除跟别的package冲突的可能(只保留straight、pyvenv和yasnippet、markdown-mode和lsp-bridge依然存在问题)。lsp-bridge配置如下(pyvenv直接copy的wiki里的):
(use-package lsp-bridge
:straight '(lsp-bridge :type git :host github :repo "manateelazycat/lsp-bridge"
:files (:defaults "*.el" "*.py" "acm" "core" "langserver" "multiserver" "resources")
:build (:not compile))
:ensure t
:init
(global-lsp-bridge-mode)
:config
;; (setq lsp-bridge-python-lsp-server 'pyright)
(setq lsp-bridge-enable-log t)
(setq lsp-bridge-python-command (expand-file-name "~/Documents/venv/lsp-bridge/bin/python3"))
(setq acm-enable-copilot t))
目前的问题是(我按照操作顺序及相应的lsp-bridge message描述):
0. ~/Documents/venv/lsp-bridge/bin/python3已经装了README中的要求的依赖,工作目录下的虚拟环境仅装了pyright
- 打开一个py文件:
Eval in Emacs: (message '"[LSP-Bridge] Error: can't find command 'pyright-langserver' to start LSP server pyright (/path/to/myfile.py), disable LSP feature.")
(minibuffer也会回显)ps ux | rg pyright
发现没有pyright-langserver启动
-
M-x pyvenv-activate
选择工作目录下的虚拟环境(配置了pyvenv-post-activate-hooks
会执行lsp-bridge-restart-process
):没有报错(当然这是因为LSP feature已经被关闭了)
- 打开一个新的py文件(因为我不知道怎么手动打开LSP feature所以选择另打开一个文件来测试):没有报错(Message为
Eval in Emacs: (message '"[LSP-Bridge] Active file 'listcomp_speed.py', enjoy hacking!")
),ps ux | rg pyright
发现有工作目录虚拟环境下的pyright-langserver(和node相应组件)运行。
自己翻资料配两天了,从刚开始各种报错mode line都是红色到现在copilot可以用,pyright这个实在搞不懂了,麻烦各位大佬帮帮忙,有什么需要的信息我一定及时补充。
感谢作者的回复!
不好意思,可能我的描述不太清楚,目前的情况是在virtual venv中是可以正常使用pyright的,但是在activate venv之前是不能正常启动pyright。
我的venv的配置就是参考(复制)您发的wiki里的代码修改了pyright.json路径。
虚拟环境一般都是找不到python或者找不到lsp server引起的,请看中文readme底部调试方法,知道报错内容就知道怎么折腾环境了。
1 个赞
感谢回复!
确实是我没仔细阅读,误用了lsp-bridge-enable-log
进行调试。
简单查看似乎确实是找不到python,不知道是不是跟虚拟环境使用symbolic link有关。我去折腾一下。
谢谢作者的指点!
顺带一提,虽然emacs新人,但也用过一些别的lsp client了,当时发现lsp-bridge就是为了找一个更快不卡手的,lsp-bridge也确实做到了,十分感谢!也希望之后自己有能力为社区做贡献吧。
提前祝作者和各位emacser新年快乐!
1 个赞
lsp-bridge的目标就是代码补全完全不卡手,很高兴你喜欢,新年快乐。
3 个赞
新年快乐各位emacser!
在补充一点吧。我之前对lsp-bridge的配置认知应该是一点偏差,误认为pyright和lsp-bridge的python环境是一致的,昨晚突然想到两个环境是(可以)不同的(不然也不会出现我之前换到虚拟环境之后可以正常运行的情况),所以我在我的相关init文件中配置了一个基础虚拟环境(类似于conda中的base?对conda也不是很熟),这样就可以流畅的使用lsp-bridge和pyright了。
1 个赞
感谢 @MirageTurtle 提供的思路, 我在 wsl2-ubuntu22.04 下使用以下配置是可行的:
;; 令 basedpyright 可以被找到
(let ((venv-bin (expand-file-name ".venv/bin" user-emacs-directory)))
(setenv "PATH" (concat venv-bin path-separator (getenv "PATH")))
(setq exec-path (cons venv-bin exec-path)))
;; 解决 tui 下 lsp-bridge 的补全菜单问题, 不过好像 tty-child-frames 更好?
(use-package popon)
(add-to-list 'load-path (expand-file-name "site-lisp/acm-terminal" user-emacs-directory))
(unless (display-graphic-p)
(with-eval-after-load 'acm
(require 'acm-terminal)))
;; 指定 lsp-bridge-python-command 到 .emacs.d 目录下创建的 uv 虚拟环境即可
;; 在 uv 虚拟环境中安装好 lsp-bridge 的依赖
(add-to-list 'load-path (expand-file-name "site-lisp/lsp-bridge" user-emacs-directory))
(require 'lsp-bridge)
(global-lsp-bridge-mode)
(setq acm-enable-doc t)
(setq acm-enable-copilot nil)
(setq lsp-bridge-enable-hover-diagnostic t)
(setq lsp-bridge-enable-completion-in-string t)
(setq lsp-bridge-enable-completion-in-minibuffer t)
(setq lsp-bridge-enable-with-tramp t)
(setq lsp-bridge-python-lsp-server "basedpyright")
(setq lsp-bridge-python-multi-lsp-server "basedpyright_ruff")
(setq lsp-bridge-tex-lsp-server "texlab")
(setq lsp-bridge-python-command (expand-file-name ".venv/bin/python3" user-emacs-directory))
p.s. 我的 pyproject.toml
文件:
[project]
name = "dotemacs"
version = "0.1.0"
description = "Emacs configuration"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"basedpyright>=1.31.3",
"epc>=0.0.5",
"orjson>=3.11.2",
"packaging>=25.0",
"paramiko>=4.0.0",
"rapidfuzz>=3.13.0",
"ruff>=0.12.9",
"setuptools>=80.9.0",
"sexpdata>=1.0.2",
"six>=1.17.0",
"watchdog>=6.0.0",
]
[dependency-groups]
dev = []
另外感谢坛友大佬 @twlz0ne 实现的 acm-terminal
, 不过现在 tty-child-frames 配合 lsp-bridge 已经完美开箱即用了吗?