远程开发

远程开发允许你以思想的速度进行编码,即使你的代码库不在你的本地机器上。你在本地使用 Zed,因此 UI 立即响应,但将繁重的计算卸载到开发服务器,以便你可以有效地工作。

注意:远程连接仍然处于“alpha”阶段。在完全发布之前,我们希望进行一些更改。

概述

远程开发需要运行两个 Zed 实例。远程机器上的无头实例,以及你本地计算机上的编辑器界面。所有配置都在你的本地计算机上完成。

目前,这两个实例通过 Zed 的服务器连接,但我们打算在该功能完全发布之前构建对等通信。

设置

  1. 下载并安装最新的 Zed 预览版
  2. 使用 cmd-shift-p remote 打开远程项目对话框。
  3. 点击“新建服务器”。
  4. 选择通过 SSH 设置,还是遵循手动设置。

    注意:对于这两种选项,你的笔记本电脑和远程机器将通过 https://collab.zed.dev/ 进行通信,因此你需要在远程机器上拥有出站互联网访问权限。

  5. 现在,你可以在笔记本电脑上打开远程机器上的文件夹。

    注意:Zed 目前无法很好地处理打开非常大的目录(例如,可能包含 >100,000 个文件的 /~)。我们正在努力改进这一点,但在此期间建议仅打开特定项目或非常大的单一仓库的子文件夹。

故障排除

UI 未显示

你需要使用相对较新的 Zed(v0.145.0 或更高版本)。

SSH 连接

如果你选择通过 SSH 连接,则你指定的命令将在 Zed 终端中运行,让你有机会键入所需的任何密码/密钥短语等。建立连接后,Zed 将下载并安装到远程机器上的 ~/.local/bin/zed,并运行。

如果你没有看到 Zed 命令的任何输出,则 Zed 很有可能在启动时崩溃。你可以通过切换到手动模式并传递 --foreground 标志来对此进行故障排除。请 提交错误,以便我们共同进行调试。

类似 SSH 的连接

Zed 以一种方式拦截 ssh,这种方式应该可以拦截大多数“ssh 包装器”建立的连接。例如,你可以指定

  • user@host 将假定你的意思是 ssh user@host
  • ssh -J jump target 通过跳跃主机进行连接
  • gh cs ssh -c example-codespace 连接到 GitHub 代码空间
  • doctl compute ssh example-droplet 连接到 DigitalOcean Droplet
  • gcloud compute ssh 适用于 Google Cloud 实例
  • ssh -i path_to_key_file user@host 使用密钥文件或证书连接到主机

zed --dev-server-token 未连接

可能有几个可能的故障原因

  • zed --dev-server-token 运行但没有输出。这可能是因为 Zed 后台进程在启动时崩溃。尝试运行 zed --dev-server-token XX --foreground 以查看任何输出,并提交错误,以便我们共同调试。
  • zed --dev-server-token 输出类似“连接被拒绝”或“未授权”的内容并立即退出。这可能是由于从你的主机向 https://collab.zed.dev 发出出站 HTTP 请求时出现问题。你可以尝试使用 curl https://collab.zed.dev 调试此问题,但我们已经看到一些情况下 curl 被列入白名单,但其他二进制文件不被允许访问网络。
  • zed --dev-server-token 输出“Zed 已在运行”。如果你正在编辑现有服务器,则再次单击“连接”可能会起作用,但如果不起作用,你将必须手动登录服务器并终止 Zed 进程。

支持的平台

远程计算机必须能够运行 Zed。以下平台应该可以工作,但请注意,我们尚未对每个 Linux 发行版进行详尽的测试

  • macOS Catalina 或更高版本(英特尔或 Apple 硅)
  • Linux(x86_64 或 arm64,我们目前不支持 32 位平台)。你必须安装版本 2.29(于 2019 年发布)或更高版本的 glibc,并且可以在全局范围内使用。
  • Windows 目前不受支持。

设置和扩展

注意:这可能会随着 alpha 计划的继续而改变。

你可以在远程实例上编辑设置文件。为此,在 ~/.config/zed 目录中向服务器添加一个新项目。如果 settings.json 文件尚不存在,你可以创建一个。

请注意,这对于配置语言服务器最有用,因为任何与 UI 相关的设置都不适用。

如果你想安装语言服务器扩展,可以将它们添加到 auto_installed_extensions 列表中。同样,你不必这样做即可获得语法高亮(由本地 zed 处理)。

{
  "auto_install_extensions": {
    "java": true
  },
}

已知限制

  • 如果你选择“手动连接”,则无法使用终端或任务
  • 你无法在同一台计算机上同时在无头模式和 GUI 模式下运行 zed
  • 你无法通过键入 zed 命令从远程终端打开文件。

反馈

请加入 Zed Discord 中的 #remoting-feedback 频道。