lsp-bridge远程补全技术的架构图
忘记了查找定义的功能也需要支持远程文件, 才推送补丁修复了这个问题。
lsp-bridge 能在 M-: RET (也就是 eval-expression 的回显区)里使用么?
理论上是可以的,因为elisp补全本身就是线程搜索,但是一般不会这样用,minibuffer空间太小了,移动光标不方便。
有这个想法是因为之前还在用corfu时,它的这个配置可以开启 minibuffer 补全,M-: 时就很好用:
相关代码:
;; src: https://github.com/minad/corfu#completing-in-the-minibuffer
;; 1.
(defun corfu-enable-in-minibuffer ()
"Enable Corfu in the minibuffer if `completion-at-point' is bound."
(when (where-is-internal #'completion-at-point (list (current-local-map)))
;; (setq-local corfu-auto nil) ;; Enable/disable auto completion
(setq-local corfu-echo-delay nil ;; Disable automatic echo and popup
corfu-popupinfo-delay nil)
(corfu-mode 1)))
(add-hook 'minibuffer-setup-hook #'corfu-enable-in-minibuffer)
;; 2.
(defun corfu-enable-always-in-minibuffer ()
"Enable Corfu in the minibuffer if Vertico/Mct are not active."
(unless (or (bound-and-true-p mct--active)
(bound-and-true-p vertico--input)
(eq (current-local-map) read-passwd-map))
;; (setq-local corfu-auto nil) ;; Enable/disable auto completion
(setq-local corfu-echo-delay nil ;; Disable automatic echo and popup
corfu-popupinfo-delay nil)
(corfu-mode 1)))
(add-hook 'minibuffer-setup-hook #'corfu-enable-always-in-minibuffer 1)
期待猫大有空时顺手实现一个 (
这个倒不难,zsbd
测试了,好用好用,多谢大佬~
- 安装好
lsp-bridge
,试图在本地Emacs中使用M-x lsp-bridge-open-remote-file
访问服务器文件时报错:
Connet
user@ip_addr:port
failed, please make sure'lsp_bridge.py'
has start at server.
-
安装
lsp-bridge
的过程如下:- 在server上clone下来lsp-bridge的代码
python lsp-bridge/lsp_bridge.py
pip install pyright
-
本地Emacs的访问命令为:
M-x lsp-bridge-open-remote-file user@ip_addr:port/home/user/file
-
服务器上已存储本地机器的公钥。
-
环境:
- 本机 Windows10, 服务器 Ubuntu 22.04 Server
- 服务器有conda环境,但
pyright
和相关依赖安装在非conda环境中,在非conda环境中运行lsp_bridge.py
脚本
粘贴一下远程 lsp_bridge.py 的终端输出和本地 Emacs *lsp-bridge*
buffer 的日志。
很奇怪呀。
你用终端模拟器, 用同样的 user@ip:/path/file 可以直接用公钥登录服务器?
使用Windows终端测试,结果是:
-
ssh user@ip_addr:port
不能连接 -
ssh user@ip_addr -p port
可以连接
我知道了, 我的SSH公钥是读取 ~/.ssh 目录下的第一个 *.pub 文件。
你Windows的公钥估计不是存在在这个目录的, 导致 lsp-bridge 无法正常登录到远程服务器。
可能这里被Emacs翻译成了C:\Users\name\AppData\Roaming\.ssh
,但公钥确实不在这个目录下边,我去试试改一下。
谢谢大佬回复!
如果可以的话, 可以提一个补丁, 看看把Windows默认的SSH公钥位置加上去, 这样其他 lsp-bridge/windows 用户就不会挂了。
猫哥,我在Emacs里用eshell测试了一下上面的路径问题
- 从结果来看,Emacs没有把他翻译成
C:\Users\name\AppData\Roaming\.ssh
- 另外也将
~/.ssh
复制到C:\Users\name\AppDataRoaming
目录下了,仍不能连接远端。 - 可能相关的两点:
- 我使用了purcell的插件exec-path-from-shell
- 远程存在conda环境,但lsp_bridge.py使用系统python环境运行的
那只能一点点加print语句看卡在什么地方了。
请问一下为什么补全的选项不是按照相关性排列呢?
比如App.vue
文件里面
但是在neovim里面
所用的最小化配置(lsp-bridge
已经git pull
了)
add-to-list 'load-path "~/.emacs.d/.local/straight/repos/yasnippet")
(add-to-list 'load-path "~/.emacs.d/.local/straight/repos/posframe")
(add-to-list 'load-path "~/.emacs.d/.local/straight/repos/markdown-mode")
(add-to-list 'load-path "~/.emacs.d/.local/straight/repos/lsp-bridge")
(require 'yasnippet)
(yas-global-mode 1)
(require 'posframe)
(require 'markdown-mode)
(require 'lsp-bridge)
(global-lsp-bridge-mode)
有些人喜欢字符少的放前面, 有些人喜欢相关性, 众口难调。