入门 Zed Industries 2026-09-14 17:42:19 · 0 阅读

第6章 Zed 代码导航指南:快速穿梭于代码库

Zed 提供了多种快捷导航方式,助你快速穿梭于代码库。以下是主要导航功能简介。

命令面板

命令面板({#kb command_palette::Toggle})是 Zed 中几乎所有功能的入口。输入几个字符即可筛选命令,按回车执行。

了解更多关于命令面板的信息 →

项目面板

项目面板({#kb project_panel::ToggleFocus})以树状视图展示工作区的文件和目录。你无需离开编辑器即可浏览、创建、重命名、移动或删除文件。该面板还能一目了然地显示 Git 状态和代码诊断信息。

了解更多关于项目面板的信息 →

文件查找器

通过 {#kb file_finder::Toggle} 可快速打开项目中的任意文件。输入文件名或路径的部分内容即可筛选结果。

文本查找器

通过 {#kb project_search::OpenTextFinder} 可快速定位项目中的任意字符串并打开相关文件。如果想进行更精细的搜索并应用额外过滤器,可点击右下角操作菜单中的按钮,切换到项目搜索。

项目搜索

通过 {#kb pane::DeploySearch} 可跨文件搜索。在搜索框中输入查询内容,按回车执行搜索。

搜索结果将在 多缓冲区中显示,支持直接编辑匹配内容。

转到定义

按 {#kb editor::GoToDefinition}(或 Cmd+点击 / Ctrl+点击)可跳转到符号的定义位置。若存在多个定义,将汇总到多缓冲区中展示。

转到符号

  • 当前文件: {#kb outline::Toggle} 可显示当前文件的符号大纲
  • 整个项目: {#kb project_symbols::Toggle} 可跨文件搜索符号

调用层级

当光标定位到某个函数时,{#action call_hierarchy::ShowIncomingCalls}({#kb call_hierarchy::ShowIncomingCalls})会列出调用该函数的所有函数,而 {#action call_hierarchy::ShowOutgoingCalls} 则列出该函数调用的函数。两者均会打开一个选择器;选择某一项即可跳转到调用位置,使用次要确认键则会在相邻面板中打开。当选择器处于打开状态时,{#action call_hierarchy::ToggleDirection} 可在调用方与被调用方之间切换,{#action menu::SelectChild} 将以当前选中的函数为根节点重新组织层级结构,以便深入探索下一层,{#action menu::SelectParent} 则返回上一层级;选择器底部的页脚会显示对应的快捷键。这两个操作也可在编辑器的右键菜单中找到。可通过设置项 call_hierarchy.modal_max_width 调整模态框的宽度。此功能要求语言服务器支持调用层级(Call Hierarchy)。

大纲面板

大纲面板({#kb outline_panel::ToggleFocus})以持久化的树形视图展示当前文件中的符号。它特别适用于配合 多缓冲区(Multibuffers) 浏览搜索结果或诊断信息。

深入了解大纲面板 →

标签页切换器

使用 {#kb tab_switcher::Toggle} 可在已打开的标签页之间快速切换。标签页按最近使用时间排序——保持按住 Ctrl 键并反复按 Tab 键即可在它们之间循环切换。

深入了解标签页切换器 →

快速参考

任务 快捷键
命令面板 {#kb command_palette::Toggle}
打开文件 {#kb file_finder::Toggle}
项目搜索 {#kb pane::DeploySearch}
文本搜索选择器 {#kb project_search::OpenTextFinder}
跳转定义 {#kb editor::GoToDefinition}
查找引用 {#kb editor::FindAllReferences}
文件内符号 {#kb outline::Toggle}
项目内符号 {#kb project_symbols::Toggle}
大纲面板 {#kb outline_panel::ToggleFocus}
标签页切换器 {#kb tab_switcher::Toggle}
项目面板 {#kb project_panel::ToggleFocus}

命令面板 - Zed

命令面板是在 Zed 中执行各种操作的主要入口。它的快捷键是最需要先记住的快捷键之一:{#kb command_palette::Toggle}。

打开的命令面板

试试看:打开命令面板,输入 new file,命令列表会收窄到 {#action workspace::NewFile}。按回车即可创建一个新的 buffer。

以后凡是看到形如 zed: ...editor: ... 这类命令的操作说明,都表示需要在命令面板中执行。

大纲面板 - Zed

除了模态大纲(cmd-shift-o),Zed 还提供了大纲面板。可以通过 cmd-shift-b(在命令面板中执行 {#action outline_panel::ToggleFocus})打开,也可以点击状态栏中的 Outline Panel 按钮。

查看"单一"buffer(即一个标签页对应单个文件)时,大纲面板的表现与模态大纲类似——显示当前 buffer 中符号的大纲。每个符号条目会显示类型前缀(如 "struct"、"fn"、"mod"、"impl")和符号名称,方便你快速识别符号类型。点击条目即可跳转到文件中的对应位置。大纲视图还会自动滚动到当前光标所在的位置。

在单一 buffer 中使用大纲面板

与 multibuffer 配合使用

文件行按文件在 multibuffer 中的顺序排列。 如果同一个文件夹下的文件出现在 multibuffer 的不同位置,大纲面板会重复显示该文件夹的路径分组,以保持原有顺序。

当 multibuffer 中包含已从项目中删除的文件时,这些文件仍会按原路径分组,文件名带删除线。 文件夹行按路径对文件分组,即使文件夹已从磁盘上删除,也不会显示删除线。

大纲面板在配合 multibuffer 使用时最能发挥威力。以下是它的一些典型用法:

项目搜索结果

纵览整个项目的搜索结果。

在使用多缓冲区进行项目搜索时,使用大纲面板

项目诊断

以摘要形式查看语言服务器报告的所有错误和警告。

查看项目诊断多缓冲区时,使用大纲面板

查找所有引用

使用 {#action editor::FindAllReferences} 操作时,快速浏览所有引用。

查看查找所有引用多缓冲区时,使用大纲面板

大纲视图提供了一种快速定位代码特定部分的高效方式,有助于在处理多缓冲区中的大型结果集时保持上下文。

项目面板 - Zed

项目面板以树状视图展示工作区的文件和目录。 按 {#action project_panel::ToggleFocus} ({#kb project_panel::ToggleFocus})切换显示,或点击状态栏中的 项目面板 按钮。

项目面板

导航

使用方向键在条目间移动。{#kb project_panel::ExpandSelectedEntry} 展开目录,{#kb project_panel::CollapseSelectedEntry} 折叠目录。{#kb project_panel::CollapseAllEntries} 一键折叠所有目录,{#kb project_panel::ExpandAllEntries} 一键展开所有目录。按 {#kb project_panel::Open} 或单击可预览所选文件,不会创建永久选项卡。编辑该文件或双击会将其提升为永久选项卡。 中键单击文件会跳过预览,直接在一个聚焦的永久选项卡中打开。

preview_tabs.enable_preview_from_project_panel 设置为 false,即可通过单击或 {#action project_panel::Open} ({#kb project_panel::Open})直接打开永久选项卡。

自动定位

默认情况下,在编辑器中切换到某个文件时,项目面板会自动高亮显示该文件并滚动到可视区域。可通过 project_panel.auto_reveal_entries 设置禁用此功能。

粘性滚动

project_panel.sticky_scroll 开启时(默认状态),滚动面板时祖先目录会固定在顶部,方便你随时确认当前所处的目录位置。

项目面板:启用粘性滚动

项目面板:禁用粘性滚动

目录折叠

project_panel.auto_fold_dirs 开启时(默认状态),仅包含单个子目录的目录链会被合并为一行(例如显示为 src/utils/helpers 而非三个独立的层级)。右键点击已折叠的目录并选择展开目录即可还原层级,或选择折叠目录再次合并。

项目面板:启用自动折叠目录

项目面板:禁用自动折叠目录

多选条目

按住 shift 并配合上下方向键可标记多个条目。剪切、复制、移至废纸篓、删除及拖拽等大多数文件操作均适用于所有已标记的条目。

当恰好标记了两个文件时,{#action project_panel::CompareMarkedFiles} ({#kb project_panel::CompareMarkedFiles})会打开差异对比视图来比较这两个文件。

项目面板:比较已标记文件

文件操作

右键点击条目可查看可用操作列表,或使用下方的快捷键。

创建文件和目录

  • {#action project_panel::NewFile} ({#kb project_panel::NewFile})在选定目录内新建文件。
  • {#action project_panel::NewDirectory} ({#kb project_panel::NewDirectory})新建目录。

会出现一个内联编辑器供你输入名称。按 enter 确认,或按 escape 取消。

重命名

按 {#kb project_panel::Rename} 重命名选中的条目。文件名主体会被预先选中,这样你输入新名称时不会误改扩展名。按 enter 确认,或按 escape 取消。

剪切、复制和粘贴

  • {#action project_panel::Cut}({#kb project_panel::Cut})标记条目待移动。
  • {#action project_panel::Copy}({#kb project_panel::Copy})标记条目待复制。
  • {#action project_panel::Paste}({#kb project_panel::Paste})将它们粘贴到选中的目录。

粘贴时如果产生命名冲突,Zed 会追加 "copy" 后缀(如 file copy.txtfile copy 2.txt)。如果粘贴单个文件时生成了后缀,会自动打开重命名编辑器,方便你调整名称。

复制副本

{#action project_panel::Duplicate}({#kb project_panel::Duplicate})一步完成选中条目的复制粘贴。

移入废纸篓和删除

  • {#action project_panel::Trash}({#kb project_panel::Trash})将条目移到系统废纸篓。
  • {#action project_panel::Delete}({#kb project_panel::Delete})永久删除条目。

这两个操作都会弹出确认提示,列出受影响的文件;如果有文件存在未保存的更改,提示中还会发出警告。

拖拽

在面板内拖动条目即可移动它们。放下时按住 alt 则改为复制而非移动。你也可以把文件从操作系统的文件管理器拖入项目面板,将其复制到项目中。拖拽功能可通过 project_panel.drag_and_drop 设置关闭。

Git 集成

启用 project_panel.git_status(默认启用)后,文件和目录名会根据 git 状态着色显示:已修改、已添加、已删除、未跟踪或存在冲突。在根目录不是 git 仓库的项目中,只会为已激活的仓库显示状态。

project_panel.git_status_indicator 设为 true(默认关闭)后,每个名称旁会显示字母标记:M(已修改)、A(已添加)、D(已删除)、U(未跟踪)或 !(冲突)。

Project Panel: Git Integration

使用 {#action project_panel::SelectNextGitEntry} 和 {#action project_panel::SelectPrevGitEntry} 可以在包含未提交更改的文件之间快速跳转。右键菜单还提供 恢复文件 选项用于丢弃更改,以及 查看文件历史 选项用于浏览文件的提交日志。

诊断信息

project_panel.show_diagnostics 设置控制文件和文件夹图标上是否显示错误和警告指示器。将其设为 "all" 可同时显示错误和警告,设为 "errors" 仅显示错误,设为 "off" 则隐藏所有指示器。诊断信息会向上传播——如果深层目录中的某个文件存在错误,其上级文件夹也会显示相应的指示器。

启用 project_panel.diagnostic_badges(默认禁用)可在每个条目旁显示错误和警告的具体数量。使用 {#action project_panel::SelectNextDiagnostic} 和 {#action project_panel::SelectPrevDiagnostic} 可在包含诊断信息的文件间导航。

更多详情参见 诊断与快速修复,其中包含编辑器和选项卡的诊断相关设置。

筛选与排序

隐藏文件

  • project_panel.hide_gitignore 用于隐藏匹配 .gitignore 规则的文件。可通过 {#action project_panel::ToggleHideGitIgnore} 切换此状态。
  • project_panel.hide_hidden 用于隐藏 dotfile 及其他隐藏项。可通过 {#action project_panel::ToggleHideHidden} 切换此状态。

排序

project_panel.sort_mode 设置控制分组方式:

  • "directories_first"(默认)— 每一层级中目录排在文件之前。
  • "files_first" — 文件排在目录之前。
  • "mixed" — 目录和文件混合排序。

project_panel.sort_order 设置控制名称比较规则:

  • "default" — 不区分大小写的自然排序(例如 file2 排在 file10 之前)。
  • "upper" — 大写名称优先分组,其次是小写名称。
  • "lower" — 小写名称优先分组,其次是大写名称。
  • "unicode" — 按原始 Unicode 码点顺序排序,不进行大小写折叠。

其他操作

  • {#action project_panel::RevealInFileManager} ({#kb project_panel::RevealInFileManager}) 在 Finder 或文件资源管理器中显示选中条目。
  • {#action project_panel::NewSearchInDirectory} ({#kb project_panel::NewSearchInDirectory}) 开启仅限所选目录范围内的项目搜索。
  • {#action project_panel::RemoveFromProject} 从项目中移除工作区根文件夹。

撤销与重做

项目面板会记录通过它执行的文件操作历史,支持撤销 ({#action project_panel::Undo} / {#kb project_panel::Undo}) 和重做 ({#action project_panel::Redo} / {#kb project_panel::Redo}),兼容本地和远程项目。

以下操作会被跟踪:

  • {#action project_panel::NewFile}
  • {#action project_panel::NewDirectory}
  • {#action project_panel::Rename}
  • {#action project_panel::Trash}
  • {#action project_panel::Paste}
  • {#action project_panel::Duplicate}

除上述操作外,在面板内拖放移动项目,以及从 Zed 外部拖入文件,同样会被记录。

撤销移动或重命名操作(例如 {#action project_panel::Rename}、{#action project_panel::Cut} 后粘贴,或面板内拖放),会将项目恢复至原始名称或位置。

撤销创建文件或目录的操作(例如 {#action project_panel::NewFile}、{#action project_panel::NewDirectory}、{#action project_panel::Duplicate}、{#action project_panel::Copy} 后粘贴,或从 Zed 外部拖入),会将新建项目移至系统回收站,而非直接删除。这确保了可恢复性并支持重做,但也可能使你在回收站中看到这些项目。

若将多项此类操作合并执行,例如选中多个文件并移动至另一文件夹,整个批次将作为单步撤销或重做,且单个操作失败不会阻碍其余操作。

局限性

  • 当与他人共享的项目中协同时,无法使用撤销和重做功能。{#action project_panel::Trash} 亦适用此限制,因此在作为访客参与共享项目时,文件只能永久删除,且无法撤销文件操作。
  • 结果路径被 file_scan_exclusions 设置排除在项目之外的操作不会被记录。例如,当 **/*.secret 被排除时,创建名为 token.secret 的文件或将现有文件重命名为 token.secret 都能在磁盘上成功执行,但该操作无法在面板中撤销。
  • 永久删除项目({#action project_panel::Delete})不会被追踪,也无法撤销。
  • 撤销 {#action project_panel::Trash} 会从系统回收站中恢复该项目。如果回收站已被清空,则无法再恢复。
  • 撤销和重做基于文件系统的当前状态。如果文件系统在 Zed 之外发生了变化——例如目标位置已存在冲突文件,或项目已被其他程序移动或删除——该操作可能无法撤销,Zed 会相应地显示通知。
  • 在不支持系统回收站的远程主机上,{#action project_panel::Trash} 会执行失败,依赖它的功能也会失败,例如撤销移入回收站的操作,或撤销创建文件/目录的操作。截至撰写本文时,Zed 还不能提前可靠地检测回收站支持情况,因此该操作始终可用,但可能会报错。
  • 撤销历史不会跨会话保留,退出 Zed 即被清空。

Tab Switcher

Tab Switcher 提供了在 Zed 已打开标签页之间快速切换的方式。它按最近使用顺序列出所有打开的标签页,方便你立刻回到刚才编辑的内容。

Tab Switcher with multiple panes

快速切换

通过 {#kb tab_switcher::Toggle} 打开 Tab Switcher 时(而非从命令面板运行 {#action tab_switcher::Toggle}),只要按住 ctrl 键,切换器就会保持激活状态。

按住 ctrl 期间,每按一次 tab 就切换到下一个项目(按住 shift 则向后切换);松开 ctrl 后,选中的项目即被确认,切换器随之关闭。

打开 Tab Switcher

还可以通过 {#action tab_switcher::Toggle}({#kb tab_switcher::Toggle})或 {#action tab_switcher::ToggleAll} 打开标签页切换器。

在标签页切换器打开期间,你可以:

  • 按 {#kb menu::SelectNext} 移动到列表中的下一个标签页
  • 按 {#kb menu::SelectPrevious} 移动到上一个标签页
  • enter 确认选中的标签页并关闭切换器
  • escape 关闭切换器并返回到打开切换器时的原始标签页
  • 按 {#kb tab_switcher::CloseSelectedItem} 关闭当前选中的标签页

当你浏览列表时,Zed 会将窗格的活动项更新为匹配所选的标签页。

操作参考

操作 描述
{#action tab_switcher::Toggle} 为当前窗格打开标签页切换器
{#action tab_switcher::ToggleAll} 打开标签页切换器,显示所有窗格的标签页
{#action tab_switcher::CloseSelectedItem} 在标签页切换器中关闭所选标签页

评论 (0)