远程开发
远程开发允许您以思维的速度编写代码,即使您的代码库不在本地机器上。您在本地使用 Zed,因此 UI 响应即时,但将繁重的计算卸载到开发服务器,以便您可以高效工作。
概述
远程开发需要两台计算机:运行 Zed UI 的本地机器和运行 Zed 无头服务器的远程服务器。两者通过 SSH 通信,因此您需要能够从本地机器 SSH 连接到远程服务器才能使用此功能。

在您的本地机器上,Zed 运行其 UI,与语言模型交互,使用 Tree-sitter 解析和语法高亮代码,并存储未保存的更改和最近的项目。源代码、语言服务器、任务和终端都在远程服务器上运行。
注意: 远程开发的原始版本通过 Zed 的服务器发送流量。自 Zed v0.157 起,您无法再使用该模式。
设置
- 下载并安装最新的 Zed。您需要至少 Zed v0.159。
- 使用 ctrl-cmd-shift-o|alt-ctrl-shift-o 打开“远程项目”对话框。
- 点击“连接新服务器”并输入您用于 SSH 连接到服务器的命令。有关您可以传递的选项,请参阅 支持的 SSH 选项。
- 您的本地机器将尝试使用您路径中的
ssh二进制文件连接到远程服务器。假设连接成功,Zed 将在远程主机上下载服务器并启动它。 - 一旦 Zed 服务器运行,系统将提示您选择要在远程服务器上打开的路径。
注意: Zed 目前无法很好地处理打开非常大的目录(例如,可能包含超过 100,000 个文件的
/或~)。我们正在努力改进这一点,但在此期间建议仅打开特定的项目或非常大的单体仓库的子文件夹。
对于不需要任何 SSH 参数的简单情况,您可以运行 zed ssh://[<user>@]<host>[:<port>]/<path> 直接打开远程文件夹/文件。如果您想热链接到 SSH 项目,请使用以下格式的链接:zed://ssh/[<user>@]<host>[:<port>]/<path>。
支持的平台
远程机器必须能够运行 Zed 的服务器。以下平台应该可以工作,但请注意我们尚未对每个 Linux 发行版进行详尽测试
- macOS Catalina 或更高版本 (Intel 或 Apple Silicon)
- Linux (x86_64 或 arm64,我们尚不支持 32 位平台)
- Windows 尚未支持作为远程服务器,但 Windows 可以用作连接到远程服务器的本地机器。
配置
远程服务器列表存储在您的设置文件 cmd-,|ctrl-, 中。您可以使用远程项目对话框 ctrl-cmd-shift-o|alt-ctrl-shift-o 编辑此列表,该对话框提供了一些健壮性——例如,它会在将其写入设置文件之前检查连接是否可以建立。
{
"ssh_connections": [
{
"host": "192.168.1.10",
"projects": [{ "paths": ["~/code/zed/zed"] }]
}
]
}
Zed 调用您路径中的 ssh,因此它将继承您在 ~/.ssh/config 中为给定主机配置的任何内容。也就是说,如果您需要覆盖任何内容,可以在每个连接上配置以下附加选项
{
"ssh_connections": [
{
"host": "192.168.1.10",
"projects": [{ "paths": ["~/code/zed/zed"] }],
// any argument to pass to the ssh master process
"args": ["-i", "~/.ssh/work_id_file"],
"port": 22, // defaults to 22
// defaults to your username on your local machine
"username": "me"
}
]
}
每个连接有两个额外的 Zed 特定选项:upload_binary_over_ssh 和 nickname
{
"ssh_connections": [
{
"host": "192.168.1.10",
"projects": [{ "paths": ["~/code/zed/zed"] }],
// by default Zed will download the server binary from the internet on the remote.
// When this is true, it'll be downloaded to your laptop and uploaded over SSH.
// This is useful when your remote server has restricted internet access.
"upload_binary_over_ssh": true,
// Shown in the Zed UI to help distinguish multiple hosts.
"nickname": "lil-linux"
}
]
}
如果您通过命令行打开到主机的连接,例如 zed ssh://192.168.1.10/~/.vimrc,则通过查找与命令行 URL 的主机/用户名/端口匹配的第一个连接,从您的设置文件中读取额外选项。
此外,值得注意的是,虽然您可以在命令行上传递密码 zed ssh://user:password@host/~,但我们不支持将密码写入您的设置文件。如果您反复连接到同一主机,则应配置基于密钥的身份验证。
Windows 上的远程开发 (SSH)
Windows 上的 Zed 支持 SSH 远程连接,并在需要时提示凭据。
如果遇到身份验证问题,请确认您的 SSH 密钥代理正在运行(例如,ssh-agent 或您的 Git 客户端代理)并且 ssh.exe 在 PATH 中。
Windows 上的 SSH 故障排除
当系统提示输入凭据时,请使用图形 askpass 对话框。如果它没有出现,请检查凭据管理器冲突以及您的终端是否阻止了 GUI 提示。
WSL 支持
Zed 在 Windows 上原生支持打开 WSL 中的文件夹。
在 WSL 中打开本地文件夹
要在 WSL 容器中打开本地文件夹,请使用 projects: open in wsl 操作并选择要打开的文件夹。系统将为您显示可用于打开文件夹的 WSL 发行版列表。
打开已在 WSL 中的文件夹
要打开已位于 WSL 容器中的文件夹,请使用 projects: open wsl 操作并选择 WSL 发行版。该发行版将被添加到 远程项目 窗口中,您将能够在其中打开文件夹。
端口转发
如果您希望能够从本地机器连接到远程服务器上的端口,您可以在设置文件中配置端口转发。这对于开发网站特别有用,这样您就可以在工作时在浏览器中加载网站。
{
"ssh_connections": [
{
"host": "192.168.1.10",
"port_forwards": [{ "local_port": 8080, "remote_port": 80 }]
}
]
}
这将导致从您的本地机器到 localhost:8080 的请求被转发到远程机器的端口 80。在底层,这使用了 ssh 的 -L 参数。
默认情况下,这些端口绑定到 localhost,因此与您的开发机器在同一网络中的其他计算机无法访问它们。您可以将 local_host 设置为绑定到不同的接口,例如,0.0.0.0 将绑定到所有本地接口。
{
"ssh_connections": [
{
"host": "192.168.1.10",
"port_forwards": [
{
"local_port": 8080,
"remote_port": 80,
"local_host": "0.0.0.0"
}
]
}
]
}
这些端口也默认指向远程主机上的 localhost 接口。如果您需要更改此设置,您还可以设置远程主机
{
"ssh_connections": [
{
"host": "192.168.1.10",
"port_forwards": [
{
"local_port": 8080,
"remote_port": 80,
"remote_host": "docker-host"
}
]
}
]
}
Zed 设置
打开远程项目时有三个相关的设置位置
- 您的本地机器上的本地 Zed 设置(在 macOS 上是
~/.zed/settings.json,在 Linux 上是~/.config/zed/settings.json)。 - 远程服务器上的服务器 Zed 设置(在相同位置)。
- 项目设置(在您的项目中的
.zed/settings.json或.editorconfig中)
本地 Zed 和服务器 Zed 都读取项目设置,但它们不知道彼此的主 settings.json。
根据您要进行的设置类型,您应该使用哪个设置文件
- 项目设置应用于影响项目的事务:缩进设置、要使用的格式化程序/语言服务器等。
- 服务器设置应用于影响服务器的事务:语言服务器的路径等。
- 本地设置应用于影响 UI 的事务:字体大小等。
此外,您在本地安装的任何扩展都将传播到远程服务器。这意味着语言服务器等将正确运行。
初始化远程服务器
一旦您提供了 SSH 选项,Zed 就会调用本地机器上的 ssh,使用您提供的选项创建 ControlMaster 连接。
SSH 需要的任何提示都将显示在 UI 中,因此您可以验证主机密钥、输入密钥密码等。
建立主连接后,Zed 将检查远程二进制文件是否存在于远程机器的 ~/.zed_server 中,并且其版本与您当前使用的 Zed 版本匹配。
如果不存在或版本不匹配,Zed 将尝试下载最新版本。默认情况下,它将直接从 https://zed.rust-lang.net.cn 下载,但如果您为该服务器设置:{"upload_binary_over_ssh":true},它将把二进制文件下载到您的本地机器,然后将其上传到远程服务器。
如果您想自己维护服务器二进制文件,可以这样做。您可以从 GitHub 下载我们预构建的版本,或者使用 cargo build -p remote_server --release 自己构建。如果您这样做,您必须将其上传到服务器上的 ~/.zed_server/zed-remote-server-{RELEASE_CHANNEL}-{VERSION},例如 ~/.zed_server/zed-remote-server-stable-0.181.6。版本必须与您正在使用的 Zed 本身版本完全匹配。
维护 SSH 连接
服务器初始化后。Zed 将创建新的 SSH 连接(重用现有的 ControlMaster)以运行远程开发服务器。
每个连接都尝试以代理模式运行开发服务器。如果守护程序未运行,此模式将启动它;如果它正在运行,则重新连接到它。这样,当您的连接断开并重新启动时,您可以继续工作而不会中断。
如果重新连接失败,守护程序将不会被重用。也就是说,未保存的更改默认在本地持久保存,以便您不会丢失工作。您始终可以在以后重新连接到项目,Zed 将恢复未保存的更改。
如果您遇到连接问题,您应该能够在 Zed 日志 cmd-shift-p Open Log 中看到更多信息。如果您看到意外情况,请提交 GitHub issue 或在 Zed Discord 中的 #remoting-feedback 频道联系我们。
支持的 SSH 选项
在底层,Zed 调用 ssh 二进制文件连接到远程服务器。我们为每个项目创建一个 SSH 控制主站,然后使用它来多路复用 Zed 协议本身、您打开的任何终端以及您运行的任务的 SSH 连接。我们从您的 SSH 配置文件中读取设置,但如果您想为 SSH 控制主站指定其他选项,您可以配置 Zed 来设置它们。
在“连接新服务器”对话框中输入时,您可以使用 bash 风格的引用来传递包含空格的选项。创建服务器后,它将添加到您的设置文件中的 "ssh_connections": [] 数组中。您可以直接编辑设置文件以更改 SSH 连接。
支持的选项
-p/-l- 这等效于在主机字符串中传递端口和用户名。-L/-R用于端口转发-i- 使用特定的密钥文件-o- 设置自定义选项-J/-w- 代理 SSH 连接-F用于指定ssh_config- 以及...
-4,-6,-A,-B,-C,-D,-I,-K,-P,-X,-Y,-a,-b,-c,-i,-k,-l,-m,-o,-p,-w,-x,-y
请注意,我们特意不允许某些选项(例如 -t 或 -T),因为 Zed 会为您设置它们。
已知限制
- 您无法通过键入
zed命令从远程终端打开文件。
反馈
请加入 Zed Discord 中的 #remoting-feedback 频道。