[已修复] lsp-bridge编辑服务器 txt 文件, 无法更新文件内容

看看远程终端是否有啥输出。

反馈的时候尽量把详细步骤说一下,要不我不知道你什么时候操作,怎么出错了。

详细步骤如下 1.服务端debian10终端下执行 python3 lsp_bridge.py 启动,输出

* Running lsp-bridge in remote server, use command 'lsp-bridge-open-remote-file' to open remote file.

2.执行emacs-q.bat脚本启动emacs -q

@echo off
set EMACS_ENV_DIR=d:\emacs_env
set HOME=%EMACS_ENV_DIR%\home
set TMP=d:\tmp
set TEMP=d:\tmp
set PATH=

set PATH=%PATH%;%EMACS_ENV_DIR%;d:\portable\emacs-29.0.50-snapshot-2022-04-02\bin;D:\Installed\python3.11;D:\Installed\python3.11\Scripts;D:\Installed\OpenSSL-Win64\bin
set PATH=%PATH%;D:\emacs_env\PortableGit\bin;D:\emacs_env\PortableGit\mingw32\bin
runemacs.exe -Q
exit

3.find-file打开 lspbrg.el 文件并 eval-buffer

(add-to-list 'load-path "~/.emacs.d/emacs-packages/posframe")
(add-to-list 'load-path "~/.emacs.d/emacs-packages/markdown-mode")
(add-to-list 'load-path "~/.emacs.d/emacs-packages/yasnippet")
(add-to-list 'load-path "~/.emacs.d/emacs-packages/lsp-bridge")
(require 'yasnippet)
(yas-global-mode 1)
(require 'lsp-bridge)
(setq debug-on-error t)
(setq lsp-bridge-enable-log t)
(setq lsp-bridge-python-command "python3.exe")
(global-lsp-bridge-mode)

4.此时 *lsp-bridge* 不存在, M-x lsp-bridge-restart-process

5.M-x lsp-bridge-open-remote-file 输入 [email protected]:22/home/owen/tmp/test.txt

6.提示输入密码,输入后回车,注意到远程终端下输出: --- [19:17:52.690236] Build connect from 192.168.56.2:36446

7.远程文件test.txt在本地打开了一个 [LBR] test.txt 的buffer

8.随便编辑一下,调用 M-x lsp-bridge-remote-save-buffer,cat查看远程文件,没有修改成功,远程终端没有新的提示信息

9.*lsp-bridge* buffer内容如下

Eval in Emacs: (lsp-bridge--first-start '10712)
Eval in Emacs: (message '"[LSP-Bridge] Open [email protected]#22:/home/owen/tmp/test.txt...")

--- [19:17:55.016750] Receive remote message: {"command": "get_emacs_vars", "args": ["tabnine-bridge-binaries-folder"], "host": "192.168.56.2"}

--- [19:17:55.035301] Receive remote message: {"command": "get_emacs_vars", "args": ["acm-backend-search-sdcv-words-candidates-max-number", "acm-backend-search-sdcv-words-dictionary"], "host": "192.168.56.2"}

--- [19:17:55.046045] Receive remote message: {"command": "get_emacs_vars", "args": ["lsp-bridge-enable-log"], "host": "192.168.56.2"}
Eval in Emacs: (lsp-bridge-open-remote-file--response '"192.168.56.2" '"/home/owen/tmp/test.txt" '"dGVzdCBmaWxlIHNkZgpoZWxsbwplZGl0IHdpdCBlZGl0cGx1cwo=" '(:line 0 :character 0))
Eval in Emacs: (message '"[LSP-Bridge] Open file 192.168.56.2:/home/owen/tmp/test.txt")

可以在

https://github.com/manateelazycat/lsp-bridge/blob/d9434d98f3a6b3ff3999ecae8e25cedb884c57dc/remote_file.py#L210

这两个地方添加一些打印消息, 看看是 lsp-bridge 没有发送 save_file 消息? 还是远程 lsp-bridge 没有接受到 save_file 消息?

我刚才测试了一下, 是可以远程保存的。

在远程py中添加了打印,本地执行保存时,打印了这一行消息,但是看文件还是没有变化

在 handle_change_file 函数也加了print,但是没看到打印。

可以看看这里添加打印, 看看 change_file 的消息是否发送给远端服务器?

感觉你是 change_file 消息没有发送, 导致远端服务器的内存里文件内容没有发生变化, 保存的还是打开时文件的内容。

确实是没有change_file的消息发送

可以帮忙调查一下是什么原因没有发送change_file消息吗?

这个原因找到了,你应该就可以使用远程功能了。

好的,我得研究一下源码

1 个赞

找到原因了,因为我打开的是一个 .txt 文件,lsp-bridge-mode 默认没有开启,调用不到 lsp-bridge-monitor-after-change,即使开启了,也因为没有lsp server,这个 lsp-bridge-call-file-api-p 函数返回nil,导致没有发送 change_file 消息,换成打开一个远程的 c 文件后可以了

1 个赞

我晚上回家改一改,如果是远程文件,虽然没有lsp server,也可以远程编辑和保存。

lsp-bridge使用的性能应该要比tramp快很多。

确实感觉挺快的,而且是实时编辑保存了。

1 个赞

lsp-bridge用的socket实时发送diff text。

原理上比tramp那种xdelta要快非常多。

更新最新版, lsp-bridge 可以对远程的 *.txt 文件提供远程编辑和保存的支持, 即使 *.txt 文件没有对应的 lsp server 进行补全。

更新了一下,远程txt可以编辑了。

1 个赞