代码导航

Visual Studio Code 拥有一个高生产力的代码编辑器,当与编程语言服务结合时,它为您提供了集成开发环境(IDE)的强大功能和文本编辑器的速度。在本主题中,我们将首先描述 VS Code 的语言智能功能(建议、参数提示、智能代码导航),然后展示核心文本编辑器的强大功能。

快速文件导航

提示: 当您输入 ⌘P (Windows, Linux Ctrl+P) (快速打开) 时,您可以通过文件名打开任何文件。

资源管理器非常适合在探索项目时在文件之间导航。然而,当你在处理任务时,你会发现自己快速地在同一组文件之间跳转。VS Code 提供了两个强大的命令,通过易于使用的键绑定在文件和跨文件之间导航。

按住 Ctrl 并按下 Tab 以查看在编辑器组中打开的所有文件列表。要打开其中一个文件,请再次使用 Tab 选择您想要导航到的文件,然后释放 Ctrl 以打开它。

快速导航

或者,您可以使用 ⌃- (Windows Alt+Left, Linux Ctrl+Alt+-)⌃⇧- (Windows Alt+Right, Linux Ctrl+Shift+-) 在文件和编辑位置之间导航。如果您在同一文件的不同行之间跳转,这些快捷键可以让您轻松地在这些位置之间导航。

面包屑导航

编辑器在其内容上方有一个导航栏,称为Breadcrumbs。它显示当前位置,并允许您在文件夹、文件和符号之间快速导航。

面包屑导航

面包屑始终显示文件路径,并在语言扩展的帮助下,显示到光标位置的符号路径。显示的符号与大纲视图和转到符号中的符号相同。

在路径中选择一个面包屑会显示该级别的兄弟项的下拉菜单,以便您可以快速导航到其他文件夹和文件。

面包屑文件夹下拉菜单

如果当前文件类型支持符号语言,您将看到当前符号路径以及同一级别及以下的其他符号的下拉列表。

面包屑符号下拉菜单

您可以通过视图 > 显示面包屑切换或通过breadcrumbs.enabled 设置来关闭面包屑。

面包屑定制

面包屑导航的外观可以自定义。如果您有非常长的路径或只对文件路径或符号路径感兴趣,您可以使用 breadcrumbs.filePathbreadcrumbs.symbolPath 设置。两者都支持 on, off, 和 last,它们定义了您是否看到路径的哪一部分。默认情况下,面包屑导航在面包屑的左侧显示文件和符号图标,但您可以通过将 breadcrumbs.icons 设置为 false 来移除图标。

面包屑中的符号顺序

您可以通过breadcrumbs.symbolSortOrder设置来控制符号在面包屑下拉菜单中的排序方式。

允许的值为:

  • position - 文件中的位置(默认)
  • name - 按字母顺序排列
  • type - 符号类型顺序

面包屑键盘导航

要与面包屑交互,请使用聚焦面包屑命令或按下⇧⌘. (Windows, Linux Ctrl+Shift+.)。它将选择最后一个元素并打开一个下拉菜单,允许您导航到同级文件或符号。使用 (Windows, Linux Left) (Windows, Linux Right)键盘快捷键可以转到当前元素之前或之后的元素。当下拉菜单出现时,开始输入 - 所有匹配的元素将被突出显示,最佳匹配将被选中以便快速导航。

你也可以不使用下拉菜单与面包屑进行交互。按下 ⇧⌘; (Windows, Linux Ctrl+Shift+;) 来聚焦最后一个元素,使用 (Windows, Linux Left) (Windows, Linux Right) 来导航,并使用 Space 在编辑器中显示该元素。

转到定义

如果语言支持,您可以通过按下F12来跳转到符号的定义。

如果你按下 Ctrl 并将鼠标悬停在一个符号上,声明的预览将会出现:

Ctrl 悬停

提示: 您可以使用 Ctrl+点击 跳转到定义,或使用 Ctrl+Alt+点击 在侧边打开定义。

转到类型定义

一些语言还支持通过从编辑器上下文菜单或命令面板运行转到类型定义命令来跳转到符号的类型定义。这将带您到符号类型的定义。命令editor.action.goToTypeDefinition默认情况下未绑定到键盘快捷键,但您可以添加自己的自定义键绑定

转到实现

Languages 还可以通过按下 ⌘F12 (Windows, Linux Ctrl+F12) 来支持跳转到符号的实现。对于接口,这将显示该接口的所有实现者;对于抽象方法,这将显示该方法的所有具体实现。

转到符号

您可以使用 ⇧⌘O (Windows, Linux Ctrl+Shift+O) 在文件中导航符号。通过输入 :,符号将按类别分组。按下 UpDown 并导航到您想要的位置。

转到符号

按名称打开符号

一些语言支持通过⌘T (Windows, Linux Ctrl+T)跨文件跳转到符号。输入你想要导航到的类型的第一个字母,无论它位于哪个文件中,然后按下Enter

按名称打开符号

查看

我们认为,当您只想快速检查某些内容时,没有什么比大的上下文切换更糟糕的了。这就是为什么我们支持窥视编辑器。当您执行转到引用搜索(通过⇧F12 (Windows, Linux Shift+F12)),或窥视定义(通过⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10)),我们将结果内嵌显示:

Peek References

您可以在弹出的编辑器中的不同引用之间导航,并直接在那里进行快速编辑。点击弹出的编辑器文件名或在结果列表中双击将在外部编辑器中打开引用。

提示: 此外,如果您按下 Escape 或在窥视编辑器区域双击,窥视窗口将关闭。您可以通过 editor.stablePeek 设置 禁用此行为。

括号匹配

当光标靠近其中一个括号时,匹配的括号将立即高亮显示。

括号匹配

提示: 您可以使用 ⇧⌘\ (Windows, Linux Ctrl+Shift+\) 跳转到匹配的括号

括号对颜色化

匹配的括号对也可以通过将editor.bracketPairColorization.enabled设置为true来进行颜色化。

括号对颜色化

所有颜色都可以主题化,最多可以配置六种颜色。

你可以使用 workbench.colorCustomizations 来在你的设置中覆盖这些主题提供的颜色:

"workbench.colorCustomizations": {
    "editorBracketHighlight.foreground1": "#FFD700",
    "editorBracketHighlight.foreground2": "#DA70D6",
    "editorBracketHighlight.foreground3": "#179fff",
},

参考信息

一些语言如C#支持内联参考信息,这些信息是实时更新的。这使您能够快速分析您的编辑的影响或您特定方法或属性在项目中的流行程度:

参考信息

提示: 直接点击这些注释来调用Peek References操作。

提示:CodeLens中显示的参考信息可以通过editor.codeLens 设置来开启或关闭。

重命名符号

某些语言支持跨文件重命名符号。按下 F2,然后输入新的名称并按下 Enter。所有使用该符号的地方都会在跨文件中被重命名。

重命名

错误与警告

警告或错误可以通过配置的任务、丰富的语言服务或linter生成,这些工具会在后台不断分析你的代码。因为我们喜欢无错误的代码,所以警告和错误会在多个地方显示:

  • 在状态栏中,有所有错误和警告计数的摘要。
  • 您可以点击摘要或按下 ⇧⌘M (Windows, Linux Ctrl+Shift+M) 来显示 问题 面板,其中列出了所有当前的错误。
  • 如果您打开一个有错误或警告的文件,它们将与文本和内联渲染,并在概览标尺中显示。

问题面板中的错误

提示:要循环查看当前文件中的错误或警告,您可以按 ⌥F8 (Windows, Linux Alt+F8)⇧⌥F8 (Windows, Linux Shift+Alt+F8),这将显示一个内联区域,详细说明问题及可能的代码操作(如果有的话):

错误和警告内联

代码操作

警告和错误可以提供代码操作(也称为快速修复)来帮助解决问题。这些操作将以灯泡的形式显示在编辑器的左侧边栏中。点击灯泡将显示代码操作选项或执行操作。

内嵌提示

一些语言提供了内嵌提示:即关于源代码的附加信息,这些信息以内联方式呈现。这通常用于显示推断的类型。下面的示例显示了内嵌提示,这些提示显示了JavaScript变量的推断类型和函数返回类型。

TypeScript中推断类型的嵌入提示

可以通过editor.inlayHints.enabled设置来启用/禁用内嵌提示,默认是启用的。需要像TypeScript或Rust这样的扩展来提供实际的内嵌提示信息。

为了保护您,VS Code 在从编辑器打开外部网站链接之前会显示一个提示。

出站链接提示

您可以在浏览器中继续访问外部网站,或者选择复制链接或取消请求。如果您选择配置受信任的域名,下拉菜单将允许您信任确切的URL、信任URL域名及其子域名,或信任所有域名以禁用出站链接保护。

配置受信任域下拉菜单

选项管理受信任的域名,也可以随时从命令面板中使用,会打开受信任的域名 JSON文件,您可以在其中添加、删除或修改受信任的域名。

// You can use the "Manage Trusted Domains" command to open this file.
// Save this file to apply the trusted domains rules.
[
  "*.twitter.com"
]

受信任的域名 JSON 文件还包含注释,其中提供了支持的域名格式示例以及默认受信任的域名列表,例如 https://*.visualstudio.comhttps://*.microsoft.com

下一步

现在你已经知道编辑器是如何工作的了,是时候尝试一些其他事情了...

常见问题

如何在快速打开中自动选择第二个条目而不是第一个?

使用命令 workbench.action.quickOpenPreviousEditor,您可以在快速打开中自动选择第二个条目。如果您想从列表中选择上一个条目而不必调用另一个键绑定,这可能很有用:

[
  {
    "key": "ctrl+p",
    "command": "workbench.action.quickOpenPreviousEditor"
  },
  {
    "key": "ctrl+p",
    "command": "-workbench.action.quickOpen"
  }
]

如何配置Ctrl+Tab以在所有组的所有编辑器之间导航

默认情况下,Ctrl+Tab 在同一编辑器组的编辑器之间导航。如果您想要在所有组中所有打开的编辑器之间导航,您可以为 workbench.action.quickOpenPreviousRecentlyUsedEditorworkbench.action.quickOpenLeastRecentlyUsedEditor 命令创建键盘快捷键:

[
  {
    "key": "ctrl+tab",
    "command": "workbench.action.quickOpenPreviousRecentlyUsedEditor",
    "when": "!inEditorsPicker"
  },
  {
    "key": "ctrl+shift+tab",
    "command": "workbench.action.quickOpenLeastRecentlyUsedEditor",
    "when": "!inEditorsPicker"
  }
]

如何在没有选择器的情况下在最近使用的编辑器之间导航

以下是您可以在不打开选择器的情况下在编辑器中导航的命令列表:

Key Command Command ID
Open Next Recently Used Editor workbench.action.openNextRecentlyUsedEditor
Open Previously Used Editor workbench.action.openPreviousRecentlyUsedEditor
Open Next Recently Used Editor in Group workbench.action.openNextRecentlyUsedEditorInGroup
Open Previously Used Editor in Group workbench.action.openPreviousRecentlyUsedEditorInGroup