远程开发
远程开发功能让你即使代码库不在本地设备上,也能保持思维同步的编码速度。你在本地运行Zed界面确保即时响应,同时将繁重计算任务交由开发服务器处理,从而实现高效工作。
功能概览
远程开发需要两台设备协同工作:运行Zed界面的本地机器,以及运行Zed无界面服务器的远程服务器。二者通过SSH协议进行通信,因此使用此功能需确保能从本地设备通过SSH接入远程服务器。

在本地设备上,Zed负责运行用户界面、与语言模型交互、使用Tree-sitter进行代码解析与语法高亮,并存储未保存的更改和近期项目记录。而源代码、语言服务器、任务执行以及终端环境则全部运行在远程服务器上。
注意: 远程开发的初始版本通过 Zed 服务器传输流量。自 Zed v0.157 版本起,该模式已不再可用。
设置
- 下载并安装最新版 Zed,版本需不低于 v0.159。
- 使用 ctrl-cmd-shift-o|alt-ctrl-shift-o 快捷键打开“远程项目”对话框。
- 点击“连接新服务器”,输入用于 SSH 连接服务器的命令。可配置参数请参阅支持的 SSH 选项。
- 系统将使用本地环境变量路径中的
ssh程序尝试连接远程服务器。若连接成功,Zed 将自动在远程主机下载并启动服务器程序。 - Zed 服务器启动后,系统将提示选择远程服务器上的路径。
注意: 当前版本对超大型目录(例如包含超过 10 万个文件的
/或~)的支持尚不完善。我们正在持续优化该功能,建议现阶段仅打开特定项目或大型单体仓库中的子文件夹。
对于无需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平台暂未支持
配置说明
远程服务器列表存储于您的设置文件中cmd-,|ctrl-,。您可通过"远程项目"对话框ctrl-cmd-shift-o|alt-ctrl-shift-o编辑该列表——此方式更具稳定性,例如在写入配置文件前会验证连接是否可建立。
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:
如果你使用命令行通过 zed ssh://192.168.1.10/~/.vimrc 连接到主机,那么系统会通过查找与命令行 URL 中的主机/用户名/端口匹配的第一个连接,从你的设置文件中读取额外选项。
此外值得注意的是,虽然您可以在命令行中传递密码zed ssh://user:password@host/~,但我们不支持将密码写入配置文件。如需重复连接同一主机,建议配置基于密钥的身份验证。
端口转发
若需从本地计算机访问远程服务器的端口,可在配置文件中设置端口转发功能。这对网站开发尤其实用,让您在工作时能通过浏览器直接访问站点。
{
"ssh_connections": [
{
"host": "192.168.1.10",
"port_forwards": [{ "local_port": 8080, "remote_port": 80 }]
}
]
}
此设置会将本地机器localhost:8080的请求转发至远程机器的80端口。该功能底层通过ssh的-L参数实现。
默认情况下,这些端口绑定到本地主机,因此与开发计算机在同一网络中的其他计算机无法访问它们。您可以设置 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。
根据您想要进行的设置类型,应使用以下设置文件:
- 项目设置应用于影响项目的配置:缩进设置、使用的格式化工具/语言服务器等。
- 服务器设置应用于影响服务器的配置:语言服务器的路径等。
- 本地设置应用于影响用户界面的配置:字体大小等。
此外,您在本地安装的任何扩展都将传播到远程服务器。这意味着语言服务器等将正确运行。
初始化远程服务器
一旦您提供了SSH选项,Zed便会调用本地机器上的ssh,根据您提供的选项创建ControlMaster连接。
SSH所需的任何提示都将在界面中显示,方便您验证主机密钥、输入密钥密码等。
主连接建立后,Zed会检查远程服务器的~/.zed_server目录中是否存在远程服务器二进制文件,并确认其版本与您当前使用的Zed版本是否匹配。
若文件不存在或版本不匹配,Zed将尝试下载最新版本。默认情况下,它会直接从https://zed.dev下载;但如果您在该服务器的设置中配置了{"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工单或通过Zed Discord的#remoting-feedback频道联系我们。
支持的SSH选项
在底层,Zed通过调用ssh二进制文件来连接远程服务器。我们为每个项目创建一个SSH控制主连接,并利用该连接实现多路复用——既承载Zed协议通信,也支持您开启的终端会话和执行的任务。系统会读取您的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 频道。