VSCode 新出了个Remote Development Extension Pack

https://code.visualstudio.com/blogs/2019/05/02/remote-development

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

https://devblogs.microsoft.com/python/remote-python-development-in-visual-studio-code/

好像是挺香的,大家怎么看

这个是真正的痛点啊, 很多人都在面对这个问题没有好的办法, 良心功能.

vim, emacs又可以跟进了. 不知道这次有没有公开的协议.

话说emacs跟进lsp这么长时间了, 体验还不好, 如果VSCode继续这么突飞猛进, 感觉emacs要落后好几年.

--------更新---------

之前简单了解过neovim, 采用了显示和数据分离的架构, 跟web的前后端模式很像. 前端(编辑器的界面)只负责输入和显示, 后端(neovim核心)才保存着真正的完整的buffer数据和文件信息. 这种架构很容易实现这样的功能.

莫非emacs也早就有这样的功能? 不太相信.

并非什么新鲜的功能,Emacs 早就支持了,不存在「跟进」说法。

远程编辑都是这个套路,也就是需要在远程环境安装并启动过一个 server/client,然后 forwading 回本地电脑,类似远程桌面:

看 vscode 给出的快捷 ssh 配置范例

Host example-remote-linux-machine-with-identity-file
    User your-user-name-on-host
    HostName another-host-fqdn-or-ip-goes-here
    IdentityFile ~/.ssh/id_rsa-remote-ssh

跟我在 Emacs 的配是一样的:

Host foo
    Hostname <remote-ip>
    User root
    IdentityFile ~/.ssh/foo
    ControlMaster auto
    ControlPath ~/.ssh/foo.sock
    RemoteForward 9999 localhost:9999

远程编辑的最基本的要求就是: 允许在远程环境安装和运行 clinet / server

对于 Emacs 来说就是在远程安装一份 Emacs,对于 VSCode 来说似乎在远程安装一个单独的 cod-insiders

跟远程桌面一样,远程编辑就是把本地的操作(打字,快捷键,命令)发往远程电脑执行。所以,你想要用 LSP 补全,也必须在远程安装相应的 LSP 服务端,想要做静态分析,也必须在远程安装 lint。

如果你的远程环境很古老,远程编辑也救不了你。


相关讨论:

3 个赞

类似Emacs server和emacs client的区别

其实我觉得可以考虑用网页写一个高颜值的Emacs client

我觉得微软这个不单单是远程编辑,而是编辑编译调试以及运行全套

Emacs 也是一样的,全套功能。

但是要使用全套功能,远程电脑上必须要能安装配套工具。

不太明白, 不知道你说的emacs的这个功能跟VSCode的是否一样.

  1. 是远端电脑启动一个emacs daemon, 本地电脑上运行一个emacs GUI? 然后本地emacs GUI可以连接到远端emacs daemon?
  2. 接1, 本地emacs GUI操作的所有内容都是远端电脑上的? 比如打开文件, eshell, 运行系统命令?

如果可以实现, 请问哪里有文档?

我平时在本机上经常用emacsclient, 但只用过本地socket模式. 如果让emacsclient通过tcp连接远端emacs server, 那么打开的窗口在哪里?

我刚测试了一下, 编辑窗口出现在远端, 本地emacsclient命令显示: `Waiting for Emacs…"

https://andy.wordpress.com/2013/01/03/automatic-emacsclient/

通过tramp? 这种方法太low了. 这个跟VSCode的可能不一样. 比如, 我在emacs里运行grep, 搜索的是哪里的文件? 我需要搜索的是远端电脑上的文件.

我觉得这个功能比较好的解决方案是类似nvim的架构, 前端显示和核心数据管理分离. 界面显示和用户输入在本机, 所有的数据和数据操作都在服务器核心模块. 这样才能有稳定和流畅的操作体验, 才能真正实现这个功能.

不,emacs server 就不是设计给远端用的,tcp 模式只是为了应付 windows 没有 socket

我真的没找到 emacs 这样的实现。。。 :sweat:

Are you sure? :rofl:

这个功能JetBrains的IDE好像早就有了,我之前有同学做机器学习就用PyCharm,就是直接用远程的Python环境。

tramp编辑本地或者内网虚拟机或者容器里的项目勉强能用,远程连接常常卡死,不如ssh上去直接用Vi。

Emacs确实有各种小毛病,比如最近发现eshell不区分stdio/stderr。。

我不太懂windows,看 manual 这么写的。准确的说是 domain socket,不要在意细节。:sweat_smile:

An Emacs server usually listens to connections on a local Unix domain socket. Some operating systems, such as MS-Windows, do not support local sockets; in that case, the server uses TCP sockets instead.

匆忙找的链接,没认真看,抱歉

我记岔了,跟 X11 forwarding 混为一谈了。我记得是有 ssh -Y remote -f emacsclient ... 这样的用法,但是刚刚这样也连不上,可能跟服务器 iptables 设置有关,不想去改了。

为避免误导,我把前面的回帖有疑议的部分划掉。


https://www.emacswiki.org/emacs/EmacsClient#toc9

tramp会调用remote端的程序,根据default-directory自动识别

在emacs里运行grep, compile, gdb, 这些都什么效果? 远端还是本地? 都可以正常工作吗?

远端,只要支持term=dummy,网络速度没问题,就没问题,本质上是tramp时候的协议,比如ssh

emacsclient 只负责告诉 emacs 打开哪个文件,窗口显示编辑文字全都是用本体负责实现的。