补全
Zed 支持两种补全来源
- “代码补全”,由 Zed 自动安装的语言服务器 (LSP) 或通过 Zed 语言扩展 提供。
- “编辑预测”,由 Zed 自己的 Zeta 模型或外部提供商(如 GitHub Copilot 或 Supermaven)提供。
语言服务器代码补全
当有合适的语言服务器可用时,Zed 将提供当前文件中变量名、函数和其他符号的补全。 您可以通过将以下内容添加到您的 Zed settings.json
文件来禁用它们
"show_completions_on_input": false
您可以使用 ctrl-space
手动触发补全,或者通过从命令面板触发 editor::ShowCompletions
操作。
更多信息,请参见
编辑预测
Zed 内置了同时预测多个编辑的支持,通过 Zeta,Zed 的开源和开放数据模型。 编辑预测会在您键入时出现,大多数情况下,您可以通过按 tab
来接受它们。
配置 Zeta
Zed 的编辑预测最初是通过标题栏上的横幅引入的。 单击它会将您带到一个模态框,其中有一个按钮(“启用编辑预测”),用于将 zed
设置为您的 edit_prediction_provider
。
但是,如果您没有遇到过该横幅,那么 Zed 的编辑预测是默认的编辑预测提供程序,您应该立即在状态栏中看到它。
切换模式
Zed 的编辑预测带有两种不同的显示模式
eager
(默认):只要不与语言服务器补全冲突,预测就会以内联方式显示subtle
:预测仅在按住修饰键(默认为alt
)时才以内联方式显示
通过 mode
键在它们之间切换
"edit_predictions": {
"mode": "eager" | "subtle"
},
或者直接通过状态栏菜单通过 UI 切换
与其他 tab
操作冲突
默认情况下,当 tab
通常执行不同的操作时,Zed 需要一个修饰键才能接受预测
- 当语言服务器补全菜单可见时。
- 当您的光标不在正确的缩进级别时。
在这些情况下,改为使用 alt-tab
来接受预测。 当语言服务器补全菜单打开时,首先按住 alt
会使其暂时消失,以便在缓冲区中预览预测。
在 Linux 上,alt-tab
通常被窗口管理器用于切换窗口,因此 alt-l
作为接受预测的默认绑定提供。 tab
和 alt-tab
也有效,但默认情况下不显示。
editor: accept partial edit prediction
(ctrl-cmd-right|alt-right) 可用于接受当前编辑预测,直到下一个单词边界。
有关其他提供程序的配置,请参阅下面的 配置 GitHub Copilot 和 配置 Supermaven 部分。 这些提供程序仅支持在当前光标处插入文本,而 Zeta 模型提供包括删除在内的多个预测。
配置编辑预测快捷键绑定
默认情况下,tab
用于接受编辑预测。 您可以通过将此内容插入您的键盘映射来使用另一个快捷键绑定
{
"context": "Editor && edit_prediction",
"bindings": {
// Here we also allow `alt-enter` to accept the prediction
"alt-enter": "editor::AcceptEditPrediction"
}
}
当 与 tab
键发生冲突时,Zed 使用不同的上下文来接受快捷键绑定(edit_prediction_conflict
)。 如果您想使用另一个,您可以将此内容插入您的键盘映射
{
"context": "Editor && edit_prediction_conflict",
"bindings": {
"ctrl-enter": "editor::AcceptEditPrediction" // Example of a modified keybinding
}
}
如果您的快捷键绑定包含修饰符(在上面的示例中为 ctrl
),它也将用于预览编辑预测并暂时隐藏语言服务器补全菜单。
您还可以将此操作绑定到没有修饰符的快捷键。 在这种情况下,Zed 将使用默认的修饰符 (alt
) 来预览编辑预测。
{
"context": "Editor && edit_prediction_conflict",
"bindings": {
// Here we bind tab to accept even when there's a language server completion
// or the cursor isn't at the correct indentation level
"tab": "editor::AcceptEditPrediction"
}
}
为了在存在语言服务器补全菜单时保持使用修饰键来接受预测,但允许 tab
接受预测而无需考虑光标位置,您可以使用 showing_completions
进一步指定上下文
{
"context": "Editor && edit_prediction_conflict && !showing_completions",
"bindings": {
// Here we don't require a modifier unless there's a language server completion
"tab": "editor::AcceptEditPrediction"
}
}
快捷键绑定示例:始终使用 Alt-Tab
下面的快捷键绑定示例导致始终使用 alt-tab
,而不是有时使用 tab
。 您可能希望这样做是为了只有一个快捷键可用于接受编辑预测,因为 tab
的行为因上下文而异。
{
"context": "Editor && edit_prediction",
"bindings": {
"alt-tab": "editor::AcceptEditPrediction"
}
},
// Bind `tab` back to its original behavior.
{
"context": "Editor",
"bindings": {
"tab": "editor::Tab"
}
},
{
"context": "Editor && showing_completions",
"bindings": {
"tab": "editor::ComposeCompletion"
}
},
如果在 settings.json
中设置了 "vim_mode": true
,则在上述操作之后需要额外的绑定才能将 tab
返回到其原始行为
{
"context": "(VimControl && !menu) || vim_mode == replace || vim_mode == waiting",
"bindings": {
"tab": "vim::Tab"
}
},
{
"context": "vim_mode == literal",
"bindings": {
"tab": ["vim::Literal", ["tab", "\u0009"]]
}
},
快捷键绑定示例:在 Linux 上显示 Tab 和 Alt-Tab
虽然在 Linux 上支持 tab
和 alt-tab
,但会显示 alt-l
。 如果您的窗口管理器没有保留 alt-tab
,并且您更喜欢使用 tab
和 alt-tab
,请将这些绑定包含在 keymap.json
中
{
"context": "Editor && edit_prediction",
"bindings": {
"tab": "editor::AcceptEditPrediction",
// Optional: This makes the default `alt-l` binding do nothing.
"alt-l": null
}
},
{
"context": "Editor && edit_prediction_conflict",
"bindings": {
"alt-tab": "editor::AcceptEditPrediction",
// Optional: This makes the default `alt-l` binding do nothing.
"alt-l": null
}
},
缺少快捷键绑定
Zed 至少需要一个快捷键绑定,用于在 Editor && edit_prediction
和 Editor && edit_prediction_conflict
上下文中执行 editor: accept edit prediction
操作(请在上面了解更多信息)。
如果您之前已将默认快捷键绑定到全局上下文中不同的操作,您将无法预览或接受编辑预测。 例如
[
// Your keymap
{
"bindings": {
// Binds `alt-tab` to a different action globally
"alt-tab": "menu::SelectNext"
}
}
]
要解决此问题,您可以指定自己的快捷键绑定来接受编辑预测
[
// ...
{
"context": "Editor && edit_prediction_conflict",
"bindings": {
"alt-l": "editor::AcceptEditPrediction"
}
}
]
如果您想使用默认的快捷键绑定,您可以将其移至更具体的上下文或将其更改为其他内容来释放它。
禁用自动编辑预测
您可以禁用编辑预测显示的不同级别,包括完全不启用它。
或者,如果您的提供商设置为 Zed,请考虑使用微妙模式。
在缓冲区上
要避免在您键入时自动显示预测,请在 settings.json
中设置此项
{
"show_edit_predictions": false
}
这会隐藏所有表明有可用预测的指示,无论您处于哪种显示模式(仅当您的提供商为 Zed 时有效)。 尽管如此,您仍然可以通过执行 editor: show edit prediction
或点击 alt-tab|alt-</kbd>. 手动触发编辑预测。
针对特定语言
要避免在使用特定语言时自动显示预测,请在 settings.json
中设置此项
{
"language": {
"python": {
"show_edit_predictions": false
}
}
}
完全关闭
要完全关闭所有提供程序的编辑预测,请将设置显式设置为 none
,如下所示
"features": {
"edit_prediction_provider": "none"
},
配置 GitHub Copilot
要使用 GitHub Copilot 作为您的提供商,请在 settings.json
中设置此项
{
"features": {
"edit_prediction_provider": "copilot"
}
}
您应该能够通过单击状态栏中的 Copilot 图标并按照设置说明登录到 GitHub Copilot。
Copilot 可以提供多个完成替代方案,并且可以使用以下操作进行导航
editor: next edit prediction
(alt-tab|alt-]):循环到下一个编辑预测editor: previous edit prediction
(alt-shift-tab|alt-[):循环到上一个编辑预测
配置 Supermaven
要使用 Supermaven 作为您的提供商,请在 settings.json
中设置此项
{
"features": {
"edit_prediction_provider": "supermaven"
}
}
您应该能够通过单击状态栏中的 Supermaven 图标并按照设置说明登录到 Supermaven。
另请参阅
您也可以使用助手面板或内联助手与语言模型进行交互,有关更多信息,请参阅助手文档。