VSCode 新出了个Remote Development Extension Pack


#1

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/

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


#2

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

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

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

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

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

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


#3
并非什么新鲜的功能,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。

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


相关讨论:


#4

类似Emacs server和emacs client的区别

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


#5

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


#6

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

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


#7

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

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

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


#8

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

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


本地开发远程编译有什么好方法?
#9
https://andy.wordpress.com/2013/01/03/automatic-emacsclient/

#10

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

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


#11

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


#12

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


#13

Are you sure? :rofl:


#14

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

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

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


#15

我不太懂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.


#16

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

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

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


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


#17

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


#18

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


#19

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


#20

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