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

我的是从 yay 里面自动安装的包,这个 org.eclipse.jdt.ls.product/target/repository/bin 的路径的话,是指 jdtls 这个命令的路径,还是指其它东西?

❯ where jdtls                                                                                                                        ─╯
/usr/bin/jdtls

你自己搜索Google吧, 我不用Java, 我也不知道。

噢噢,谢谢大佬。我自己下载安装试试。


成功了,确实是环境的问题,谢谢大佬思路指导 @manateelazycat :hugs:

用 sdk 安装的 jdk, jdlts 是无法在终端之外识别到的。(好像是python 子进程访问的东西跟 shell 不一致,反正没弄太懂)

在 Arch(Manjaro) 下,可以用 archlinux-java 来切换默认的 java jdk。这样 jdlts 就可以正常识别了。

https://wiki.archlinux.org/title/java


:clap:

1 个赞

因为vscode过于消耗内存切到emacs上来,发现了lsp-bridge。初步使用,发现对.el补全挺正常的,也比较好看,但是对.py文件没起作用,开启了日志模式。求助。 环境:win10 原生Emacs 28.2,原生Python 3.6.7。

  • 按照https://github.com/manateelazycat/lsp-bridge/blob/master/README.zh-CN.md下载了lsp-bridge,里面的文件未做任何修改,配置文件也是抄的那几行;
  • Python中执行 pip3 install epc orjson sexpdata six paramiko pyright安装了依赖及服务器pyright;
  • emacs中通过package install安装了[posframe]、[markdown-mode]、 [yasnippet]。 test.el中效果如下 但是test.py就没有任何补全提示。 lsp-bridge buffer刚开始就是报错,是pyright有问题吗? Eval in Emacs: (lsp-bridge–first-start '3697) Traceback (most recent call last): File “e:/BaiduSync/LeiMengfei/emacs.d/site-lisp/lsp-bridge/lsp_bridge.py”, line 446, in event_dispatcher getattr(self, func_name)(*func_args) File “e:/BaiduSync/LeiMengfei/emacs.d/site-lisp/lsp-bridge/lsp_bridge.py”, line 685, in _do open_file_success = self.open_file(filepath) # _do is called inside event_loop, so we can block here. File “e:/BaiduSync/LeiMengfei/emacs.d/site-lisp/lsp-bridge/lsp_bridge.py”, line 474, in open_file project_path = get_project_path(filepath) File “e:\BaiduSync\LeiMengfei\emacs.d\site-lisp\lsp-bridge\core\utils.py”, line 362, in get_project_path if get_command_result(“git rev-parse --is-inside-work-tree”, dir_path) == “true”: File “e:\BaiduSync\LeiMengfei\emacs.d\site-lisp\lsp-bridge\core\utils.py”, line 263, in get_command_result encoding=“utf-8”) TypeError: init() got an unexpected keyword argument ‘text’

Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '(“import”)) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '(“impor”)) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '(“impo”)) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) Eval in Emacs: (lsp-bridge-search-backend–record-items '“file-words” '()) …后面还有很多。

在cmd下,执行pyright -v提示“Cannot find module ‘worker_threads’”,但也没找到是怎么解决。

Python版本太低了, 导致 subprocess.Popen API没有 text 参数。

大佬回复好快。 那大佬计划支持的python最低版本是多少,能不能兼容到3.6?项目中能不能写一下?

我没有计划支持的最低版本, 建议用 Python 3.10 以上版本。

这是开源项目, 个人精力有限, 你们自己升级吧, 我不想把精力投入到各种操作系统和Python版本的维护中, 抱歉。

1 个赞

我自己升级3.10吧 :sweat_smile:

升级到了python 3.10,还是完全相同的报错,猜测还是pyright没有搞好 :sweat_smile:。 另一个疑问,.el文件能补全,为什么不需要额外安装lsp服务器?是Elisp依赖里已经包含了吗?

pyright依赖node,把node也升级到最新版了,cmd下pyright -h正常了没有报错。

重启emacs,编辑test.py还是没有补全提示,报错和之前也完全一样,test.el补全也和之前一样正常 :joy:

设置一下 lsp-bridge-python-command

elisp是emacs来提供补全,不需要lsp

你用的虚拟环境? 可以参考我的配置

https://github.com/yatsky/emacs-init/blob/master/yaoni.org#lsp-bridge

https://github.com/yatsky/emacs-init/blob/master/yaoni.org#venv

pyrightconfig.json

{
    "venvPath": "/Users/user/.pyenv/versions/3.10.7",
    "venv": "data310"
}

大佬,我又确认了几个事情。 1、最开始报错的地方是lsp-bridge\core\utils.py第263行,Popen函数,text参数在老版python(3.6.7)中没有,在3.10版中是有的,兼容性问题,这个切到Python 3.10就好了; 2、切了Python3.10后,Windows系统环境变量改了,在cmd里也确认过,但是,emacs的PATH、exec-path仍然没有3.10的路径,Windows重启后才更新,我还特地在lsp-bridge\core\utils.py第263行get_command_result函数里,加入了print(sys.executable)确认是调用的python 3.10;同时,在init-lsp-bridge.el中加了一句(setq lsp-bridge-python-command “python”),我在Python3.10安装路径下,把python.exe复制了重命名python3.exe、python3.10.exe。

Python版本及路径应该是没有问题了,还存在的问题是:对python关键字、函数补全有了,但对模块接口补全还是没有,lsp-bridge日志报错出现在get_command_result函数最后一句拿不到结果,扯出utf-8编码问题,搞不懂了。

我推送了一个补丁 Try to fixed UnicodeDecodeError in windows. · manateelazycat/lsp-bridge@4c77bfa · GitHub

你看看有没有问题, Windows 的编码默认不是 Utf-8 的, 会有这些编码问题。

1 个赞

现在lsp-bridge默认会使用数字选择补全,这个功能导致打有数字的变量名时会经常误选。请问有什么选项可以关闭这个功能吗?

(我的acm-enable-quick-accessnil

已经加了选项 Add option acm-quick-access-use-number-select · manateelazycat/lsp-bridge@5a9282d · GitHub

默认禁用数字键选择候选词。

2 个赞

可以了,感谢大佬

仓库README.md的图片链接的引号都是中文引号,导致图片加载不出来。

我提了个PR,大佬可以看一下。