看看远程终端是否有啥输出。
反馈的时候尽量把详细步骤说一下,要不我不知道你什么时候操作,怎么出错了。
看看远程终端是否有啥输出。
反馈的时候尽量把详细步骤说一下,要不我不知道你什么时候操作,怎么出错了。
详细步骤如下
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")
可以在
这两个地方添加一些打印消息, 看看是 lsp-bridge 没有发送 save_file 消息? 还是远程 lsp-bridge 没有接受到 save_file 消息?
我刚才测试了一下, 是可以远程保存的。
可以看看这里添加打印, 看看 change_file 的消息是否发送给远端服务器?
感觉你是 change_file 消息没有发送, 导致远端服务器的内存里文件内容没有发生变化, 保存的还是打开时文件的内容。
可以帮忙调查一下是什么原因没有发送change_file消息吗?
这个原因找到了,你应该就可以使用远程功能了。
好的,我得研究一下源码
找到原因了,因为我打开的是一个 .txt
文件,lsp-bridge-mode
默认没有开启,调用不到 lsp-bridge-monitor-after-change
,即使开启了,也因为没有lsp server,这个 lsp-bridge-call-file-api-p
函数返回nil,导致没有发送 change_file
消息,换成打开一个远程的 c 文件后可以了
我晚上回家改一改,如果是远程文件,虽然没有lsp server,也可以远程编辑和保存。
lsp-bridge使用的性能应该要比tramp快很多。
确实感觉挺快的,而且是实时编辑保存了。
lsp-bridge用的socket实时发送diff text。
原理上比tramp那种xdelta要快非常多。
更新最新版, lsp-bridge 可以对远程的 *.txt 文件提供远程编辑和保存的支持, 即使 *.txt 文件没有对应的 lsp server 进行补全。
更新了一下,远程txt可以编辑了。