2023 年 5 月(1.79 版本)
更新 1.79.1:此更新解决了此安全问题。
更新 1.79.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel 硅 | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2023 年 5 月版本。此版本中有许多更新,我们希望您会喜欢,其中一些主要亮点包括:
- 只读模式 - 将工作区中的特定文件和文件夹标记为只读。
- “粘贴为”选项 - 选择如何将项目链接粘贴到编辑器中。
- 自动复制外部文件 - 拖放或粘贴到 Markdown 会将新文件添加到您的工作区。
- 默认 Git 存储库分支名称 - 使用 “main” 作为默认名称或通过用户设置覆盖。
- 笔记本富文本内容搜索 - 基于笔记本输出进行搜索或按单元格类型进行筛选。
- JSX 标记的链接编辑 - 同时更改打开和关闭的 JSX 标记。
- 预览:GitHub Copilot 聊天改进 - 轻松管理您的聊天会话历史记录。内联聊天“实时预览”。
- Microsoft Build 2023 上的 VS Code - 在 YouTube 播放列表中查看会话。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
内部人员: 想尽快尝试新功能?您可以下载每晚的 内部版本,并在最新更新可用时立即尝试。
辅助功能
详细程度设置
已添加额外的 accessibility.verbosity 设置,以告知屏幕阅读器用户在关注功能时如何与功能交互。
对于 GitHub Copilot,有一些提示描述了如何通过以下方式访问 Copilot 聊天视图和编辑器内代码聊天的辅助功能帮助菜单:
accessibility.verbosity.panelChat
accessibility.verbosity.inlineChat
这些帮助菜单提供有关预期内容、如何从输入框导航到其他元素以及更多信息。
其他新的 verbosity
设置为特定的 VS Code UI 提供信息
accessibility.verbosity.keybindingsEditor
- 在键盘快捷方式编辑器中时。accessibility.verbosity.notebook
- 在笔记本中时。
accessibility.verbosity
设置默认启用(设置为“true”),但您可以单独禁用它们。
设置编辑器
macOS 上的 VoiceOver 现在可以读取“设置”编辑器中枚举设置选项的描述。使用诸如 files.autoSave
和 editor.accessibilitySupport
之类的枚举设置进行尝试。
工作台
只读模式
在某些开发场景中,将工作区的某些文件夹或文件显式标记为只读会很有帮助。例如,如果文件夹或文件内容由不同的进程管理(例如由 Node.js 包管理器管理的 node_modules
文件夹),则将其标记为只读可以避免意外更改。
对于此用例,有一些新设置可以将文件路径标记为资源管理器和文本以及笔记本编辑器中的只读
files.readonlyInclude
- 如果匹配,则将文件设置为只读的路径或 glob 模式。files.readonlyExclude
- 匹配files.readonlyInclude
时跳过只读文件的路径或 glob 模式。files.readonlyFromPermissions
- 磁盘上没有写权限的文件是否应为只读。
根据设置的规则,如果将路径视为只读,则您无法从资源管理器中修改它(例如,删除它),并且文本或笔记本编辑器为只读。
对于只读模式的更多临时切换,有一些新命令可以仅更改当前会话的模式,从而覆盖您的设置配置
- 在会话中设置活动编辑器为只读 - 将活动编辑器标记为只读。
- 在会话中设置活动编辑器为可写 - 将活动编辑器标记为可写。
- 在会话中切换活动编辑器只读 - 在只读和可写之间切换。
- 在会话中重置活动编辑器只读 - 重置会话状态。
Windows UNC 主机允许列表改进
作为 重要的安全修复的一部分,VS Code 引入了 UNC 主机的允许列表。在此里程碑中,我们解决了 Windows 用户在使用 VS Code 进行日常工作时,报告的 UNC 路径的许多可用性问题。
对话框改进
现在,启动时允许 UNC 主机的确认对话框会更新 security.allowedUNCHosts
设置,并在您选择复选框时添加主机。
此外,单击“了解更多”按钮不再关闭对话框。
新的 security.restrictUNCAccess 设置
新的设置 security.restrictUNCAccess
允许您禁用主机的 UNC 允许列表,并将行为恢复到此安全修复之前的状态。我们强烈建议不要更改此设置,因为它会使您的系统再次容易受到信息泄露漏洞的攻击。
新的选项卡大小调整选项已修复
workbench.editor.tabSizing
设置有一个新选项 fixed
,该选项使每个选项卡的宽度相等。当空间有限时,选项卡将均匀收缩到最小值。新的设置 workbench.editor.tabSizingFixedMaxWidth
设置选项卡的初始大小。
在这种模式下,当您使用鼠标快速关闭选项卡时,选项卡的宽度保持稳定,从而允许通过单击同一点来关闭每个选项卡。当您将鼠标从编辑器选项卡区域移开时,将调整宽度。
网络质量指示
当您连接到远程计算机时,VS Code 远程编辑功能的最佳体验需要良好的网络连接和低延迟。在此里程碑中,我们更新了状态栏中的远程指示器,以便在延迟非常高或网络连接似乎处于脱机状态时向您提供一些反馈。
高延迟(Web,桌面)
我们会定期测量您连接到的远程的延迟。当达到某个阈值时,远程指示器会更新以反映这一点。
脱机检测(仅限 Web)
如果您使用 Web 浏览器连接到远程,并且突然失去 Internet 连接,则远程指示器会更新以反映这一点。
继续处理
“继续处理”功能允许您在同一存储库的 VS Code 开发环境之间存储和检索正在进行中的更改,例如,当您从本地 Git 存储库升级到 GitHub Codespace,或在同一存储库的不同计算机之间切换时。
现在,即使在某个环境中配置了 HTTP 远程,而在另一个环境中配置了 SSH 远程,您也可以在 GitHub 存储库的开发环境之间传输正在进行的更改。此外,我们已开始传输其他工作台状态,例如您的“源代码管理”视图状态首选项,以实现更顺畅的转换。
编辑器
粘贴为
将文件粘贴到文本编辑器中时,有多种插入方式。您可能需要指向该文件的绝对路径。您可能需要相对于当前工作区的路径。或者,您甚至可能需要特定于当前编辑器语言的内容,例如,当粘贴到 Markdown 中时,插入到该文件的 Markdown 链接。VS Code 新的“粘贴为”功能使您可以控制粘贴内容的插入方式。
粘贴后,如果有其他可以插入粘贴内容的方式,VS Code 现在会显示一个小的“粘贴为”控件
您可以通过单击或使用 ⌘. (Windows,Linux Ctrl+.) 键盘快捷方式来打开“粘贴为”控件。当您开始键入或将光标移动到插入文本之外时,“粘贴选择器”就会消失。您还可以使用 "editor.pasteAs.showPasteSelector": "never"
完全禁用下拉选择器控件。
例如,当您将内容粘贴到笔记本中的 Markdown 单元格时,“粘贴为”控件允许您在以下选项之间切换:
- 将图像作为附件插入
- 插入 Markdown 图像引用
- 插入相对路径(对于工作区中的文件)
- 插入绝对路径
如果您希望在实际粘贴之前选择剪贴板中内容的粘贴方式,则可以使用新的粘贴为...命令。这使您可以选择内容的粘贴方式
快速建议和代码片段
快速建议意味着 VS Code 会在您键入时显示建议,而无需按 ⌃Space (Windows, Linux Ctrl+Space)。 此功能非常受欢迎,大约 90% 的建议会话都是通过键入开始的。 大量建议是通过 Tab
键接受的(而不是通过 Enter
键和键入接受字符)。
当插入代码片段时,Tab
键用于在代码片段占位符之间导航。现在,当插入代码片段时,快速建议变得激活,Tab
键可以接受补全**或**导航到下一个代码片段占位符。 为了解决此冲突,有一个 editor.suggest.snippetsPreventQuickSuggestions
设置,用于在插入代码片段时禁用快速建议。它的默认值为 true
,只要存在此设置,我们就收到了令人困惑的反馈。因此,我们决定将其默认值更改为 false
,以便在代码片段占位符内键入时将触发快速建议。
然后您可以使用以下按键
- 按
Tab
键接受补全。 - 按
Escape
键隐藏快速建议。 - 在没有建议的情况下按
Tab
键会导航到下一个代码片段占位符。
终端
fish shell 的自动 shell 集成
Shell 集成及其增强的用户体验现在将自动激活 fish shell。您可能需要更新 fish 才能使其正常工作。
上划线支持
终端现在支持 ECMA-48 中指定的上划线转义序列(SGR 53
、SGR 55
)。 此序列最常见的用途是在终端底行的应用程序“状态栏”上方添加一条线。
源代码管理
默认分支名称
从这个里程碑开始,使用 VS Code 创建的所有新 Git 存储库都将 main
设置为其默认分支。 如果您希望默认分支使用其他名称,可以使用 git.defaultBranchName
设置进行更改。当该设置设置为空时,VS Code 会遵循 Git 中配置的默认分支名称。 将文件夹发布到 GitHub 时,也会遵循 GitHub 上配置的默认分支名称。
分支选择器与 vscode.dev 和 GitHub 集成
您现在可以在 vscode.dev 中检出分支,或从 VS Code 桌面的分支选择器在 GitHub.com 上打开分支。
在下面的短视频中,分支选择器下拉列表中列出的每个分支在右侧都有按钮,用于**在 GitHub 上打开**或**在 vscode.dev 上检出**。
相似度阈值
Git status 使用相似度索引(与文件大小相比的添加/删除次数)来确定添加/删除对是否被视为重命名。 现在,您可以使用 git.similarityThreshold
设置来配置相似度阈值,该设置的值介于 0
和 100
之间。默认值为 50
。
笔记本
富内容搜索
现在,您可以从“搜索”控件中搜索打开的笔记本中的富内容。 如果您的笔记本已打开,“搜索”控件会根据其在笔记本编辑器中的显示方式显示结果(而不是搜索原始源文件的内容)。 这还允许在笔记本输入中替换文本。
使用新的笔记本搜索切换开关,您还可以筛选要搜索的单元格内容类型。
改进的单元格输出交互
添加了新的上下文键 notebookOutputInputFocused
,以确定单元格输出内的文本框是否具有焦点,以便在输出具有焦点时可以安全地使用原始热键 a/b/j/k。 聚焦在输入框上会阻止这些热键触发。
运行后格式化
笔记本现在可以在单元格执行时格式化单元格。这将触发使用**运行单元格**、**全部运行**、**运行上方/下方**以及组合的内核 + 运行命令。 此功能可以通过设置 "notebook.formatOnCellExecution": true
来启用。
保存时运行代码操作
笔记本现在支持在保存时运行代码操作。 可以在 notebook.codeActionsOnSave
设置下指定代码操作。 扩展作者可以使用单元格级别代码操作的标准类型定义提供程序,或使用新的 notebook.
前缀来定义管理整个笔记本的代码操作。 您可以查看 clean-nb-imports-ext 示例扩展,了解扩展如何使用此新设置。
语言
TypeScript 5.1
VS Code 现在附带 TypeScript 5.1.3。 此主要更新带来了新的 TypeScript 语言功能、更好的性能以及许多重要的改进和错误修复。 您可以在 TypeScript 博客上阅读有关 TypeScript 5.1 的信息。
JSX 标记的链接编辑
使用链接编辑,当您更改开头的 JSX 标记时,VS Code 将自动更新相应的结束标记。 这可以节省大量时间
此功能默认处于关闭状态,但可以通过设置来启用
"editor.linkedEditing": true
您还可以使用**开始链接编辑**命令显式启动链接编辑。
使用 F2 重命名匹配的 JSX 标记
当您在 JSX 标记上触发重命名时,VS Code 现在仅重命名匹配的标记,而不是尝试更新对该标记的所有引用
这需要 TypeScript 5.1+,并且与 HTML 中的重命名工作方式相匹配。
您可以使用 javascript.preferences.renameMatchingJsxTags
和 typescript.preferences.renameMatchingJsxTags
来禁用此行为。
JSDoc @param 补全
编写 JSDoc 注释时,VS Code 现在会显示所有缺失参数的建议
这可以帮助您快速填写文档。
在 JavaScript 文件中,@param
补全会为参数类型描述创建占位符
在 Markdown 中拖放或粘贴时,将外部媒体文件复制到工作区
想要在 Markdown 文档中添加图像或视频? 您现在可以直接将文件拖放到 Markdown 中,或者将其粘贴到 Markdown 中,而无需浪费时间先手动将文件复制到工作区,然后再添加指向该文件的链接。 如果文件当前不是工作区的一部分,VS Code 会自动将文件复制到您的工作区,并插入指向该文件的链接
这也非常适合剪贴板中的图像数据。 例如,如果您使用 Windows 上的截图工具进行屏幕截图,则可以在 Markdown 文件中按**粘贴**,VS Code 将从剪贴板数据创建一个新的图像文件,并插入指向新文件的 Markdown 图像链接。 如果您在截取屏幕截图时按住 Ctrl 键以将其复制到剪贴板,则这在 macOS 上也有效。
您还可以使用一些设置来自定义此功能的行为
markdown.copyFiles.destination
markdown.copyFiles.destination
设置控制创建新媒体文件的位置。 此设置将与当前 Markdown 文档匹配的 glob 映射到图像目标位置。 图像目标位置还可以使用一些简单的变量。 有关可用变量的信息,请参阅 markdown.copyFiles.destination
设置描述。
例如,如果我们希望工作区中 /docs
下的每个 Markdown 文件都将新媒体文件放入特定于当前文件的 images
目录中,则可以编写
"markdown.copyFiles.destination": {
"/docs/**/*": "images/${documentBaseName}/"
}
现在,当在 /docs/api/readme.md
中粘贴新文件时,图像文件将在 /docs/api/images/readme/image.png
中创建。
您甚至可以使用简单的正则表达式来转换变量,类似于代码片段。 例如,此转换在创建媒体文件时仅使用文档文件名的首字母
"markdown.copyFiles.destination": {
"/docs/**/*": "images/${documentBaseName/(.).*/$1/}/"
}
当将新文件粘贴到 /docs/api/readme.md
中时,该图像现在将在 /docs/api/images/r/image.png
下创建。
markdown.copyFiles.overwriteBehavior
markdown.copyFiles.overwriteBehavior
设置控制新创建的媒体文件是否覆盖现有文件。
默认情况下,VS Code 永远不会覆盖现有文件。 相反,如果您有一个名为 image.png
的文件,并尝试将其粘贴到工作区中已存在 image.png
的 Markdown 文档中,VS Code 将改为创建一个名为 image-1.png
的新文件。 如果您随后尝试粘贴另一个名为 image.png
的文件,则会将其创建为 image-2.png
。
如果您希望新文件覆盖现有文件,请设置 "markdown.copyFiles.overwriteBehavior": "overwrite"
。 现在,VS Code 将始终使用原始文件名,覆盖该路径下的任何现有文件。
禁用将文件复制到工作区
如果文件尚未成为工作区的一部分,VS Code 只会尝试将文件复制到您的工作区。 此外,我们目前只将媒体文件(图像、视频、音频)复制到工作区。
但是,如果您觉得这种新行为过于侵入性,可以通过设置以下内容来禁用拖放和粘贴
"markdown.editor.drop.copyIntoWorkspace": "never"
"markdown.editor.filePaste.copyIntoWorkspace": "never"
Markdown 文件中 HTML 路径的 IntelliSense
许多 Markdown 方言允许在 Markdown 文档中使用原始 HTML 标记。 在此更新中,我们将 VS Code 的大多数 Markdown IntelliSense 功能扩展到了这些 HTML 标记中使用的文件路径。 这包括对以下内容的支持
在 Markdown 中插入音频
当您将音频文件拖放到 Markdown 文档中或复制并粘贴到其中时,VS Code 现在会插入 <audio>
元素。
JSON with Lines (JSONL) 文件的语法高亮显示
JSON with Lines 描述由换行符分隔的 JSON 对象序列。 如果使用文件扩展名 jsonl
,VS Code 会提供语法高亮显示。
远程开发
远程开发扩展允许您使用 开发容器、通过 SSH 或 远程隧道连接的远程计算机或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
亮点包括
- 在当前或新的 VS Code 窗口中打开新的远程连接(通过远程隧道连接到开发容器)。
- 使转发的端口公开的更简单的工作流程。
- 初步支持从 Web 版 VS Code (vscode.dev) 连接到 WSL。
您可以在远程开发发行说明中了解有关新扩展功能和错误修复的信息。
对扩展的贡献
GitHub Copilot
在稳定版 VS Code 中使用 Copilot Chat
以前,您必须使用 VS Code Insiders 才能使用 Copilot Chat。 从 VS Code 1.79 开始,您也可以在稳定版 VS Code 中使用 Copilot Chat。 您仍然必须安装 GitHub Copilot Chat 扩展。
编辑器聊天
我们改进了编辑器聊天,最值得注意的是,我们将其默认模式更改为“livePreview”。 在此模式下,更改会直接应用于文档,并以嵌入的差异视图显示。 让我们看一下下面的示例
- 向
IUserFriendlyStatusItemEntry
类型添加了一个新属性,并且 - Copilot 相应地更新了
isUserFriendlyStatusItemEntry
检查。 - 答复使用嵌入的差异视图显示在编辑器中。 其右侧是可编辑的,并由 VS Code 的语言扩展进行检查。
- 这让您可以在接受建议之前发现答复中的错误(下面的
isMarkdownString
函数不存在),并且可以进行修复。
笔记本改进
本月,我们改进了笔记本编辑器中的聊天体验。在笔记本文件中使用 Copilot 时,Copilot 可以利用笔记本的上下文提供更相关的建议。例如,代码建议会使用之前单元格中定义的变量或模块,而无需重新创建或重新导入它们。
在运行笔记本单元格时,Copilot 现在还会为单元格执行失败提供建议。您可以通过选择单元格状态栏上的使用 Copilot 修复操作来显示这些建议。
Copilot 的建议也会在单元格执行时自动接受,因此您不必手动接受它们。
GitHub Pull Request 和 Issues 集成
当安装并启用 GitHub Pull Requests and Issues 扩展程序,并且您正在查看评论线程时,现在可以直接使用 Copilot 应用评论。您可以通过评论菜单中的使用 AI 应用建议按钮来执行此操作。
实验性的快速提问体验
主题:Panda 主题(在 vscode.dev 上预览)
在此迭代中,我们尝试使用聊天来提问快速编程问题,而无需离开上下文。如果您可以使用聊天体验,则可以使用以下设置启用此功能
"chat.experimental.quickQuestion.enable": true
功能概述
- 向 Copilot 提问一个快速问题。
- 使用 ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L)切换体验(状态会记住 30 秒,因此您可以轻松地显示、隐藏和再次显示)。
- 一个在聊天中打开按钮,用于将对话延续到聊天视图中的长篇聊天。
删除聊天条目
您现在可以通过单击聊天请求中的 X 图标来删除聊天请求/响应对。
为什么要这样做?有时,Copilot 会提供偏离主题或不正确的响应。您可以再次提问,但从会话的聊天历史记录中删除错误的响应也可能有助于使对话保持正轨。每次聊天请求可以包含的上下文量也有限制,因此删除冗长的错误响应可能有助于为更有用的信息节省上下文预算。
将聊天会话从侧边栏移动到编辑器
已经可以通过运行聊天:打开编辑器命令在编辑器中打开聊天会话,但现在也可以在侧边栏和编辑器之间来回移动聊天会话。您可以在聊天视图标题或编辑器标题菜单中的“...”菜单下找到在编辑器中打开会话和在侧边栏中打开会话命令。
聊天会话历史
您的聊天会话现在已保存到历史记录中,您可以通过选择聊天视图标题菜单中的显示历史记录按钮来浏览历史记录。您可以选择历史记录条目将该对话加载到聊天编辑器中,然后无缝地从上次停止的地方继续。您可以通过单击每行上的 X 按钮从历史记录中删除会话。
将聊天会话导出到 JSON 文件
我们添加了一个命令,聊天:导出会话,该命令将当前聚焦的聊天会话导出到 JSON 文件。然后,您可以运行聊天:导入会话命令来导入此会话并继续对话。您可以将此文件检入您的存储库,与他人共享,或者只是保存您的对话以供以后参考。请注意,当您在导入的聊天会话中继续对话时,除非您再次导出该会话,否则这些新消息将不会被保存。
代码块导航和键绑定
我们添加了一些命令和键绑定,使处理聊天响应中的代码块更加容易。聊天:下一个代码块(⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown))和聊天:上一个代码块(⌥⌘PageUp (Windows, Linux Ctrl+Alt+PageUp))将光标移动到当前聊天响应中的下一个或上一个代码块。当代码块被聚焦时,也可以从命令面板调用代码块工具栏中的命令,或者您可以为它们分配键绑定。在终端中运行默认分配了一个键绑定,⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter)。并且当您在代码块中按下正常的复制键绑定而没有选择任何内容时,现在将运行复制命令。
我们还添加了键绑定来聚焦聊天窗口(⌃⌘I (Windows, Linux Ctrl+Alt+I))以及清除聊天会话()。
Copilot YouTube 播放列表
要了解有关 GitHub Copilot 的更多信息以及技巧、窍门和最佳实践,请查看 YouTube 上的 VS Code Copilot 系列。在那里,您将找到 GitHub Copilot 的介绍、特定语言用法以及有关在开发中使用 Copilot 时如何进行有效提示的指导。
Python
在专用终端中运行 Python 文件
Python 扩展程序现在将为您使用编辑器顶部的运行按钮或 Python:在终端中运行 Python 文件命令运行的每个文件创建一个新终端,并且每次重新运行时都将继续使用此文件的“专用”终端。
如果您希望在单独的终端中运行同一文件,则可以在运行按钮菜单下选择 Python:在专用终端中运行 Python 文件。
测试发现和运行重写
本月,我们开始推出作为实验的测试重写。此重写重新设计了扩展中 unittest 和 pytest 的测试发现和执行背后的架构。虽然它没有向用户公开任何其他功能,但它减少了错误行为,并为未来的新功能打开了机会。重写正在 pythonTestAdapter
实验背后推出,您可以使用 settings.json
中的 python.experiments.optInto
选择加入和退出。最终,我们计划删除此设置并采用此新架构。如果您对此实验或重写有任何意见或建议,可以在 vscode-python 存储库中分享。
使用 Pylance 配置索引限制
有一个新的 Pylance 设置,允许您配置索引的文件计数限制:"python.analysis.userFileIndexingLimit"
,默认设置为 2000。当处理非常大的项目并且您愿意为了增强的 IntelliSense 体验而牺牲性能时,此设置会很有用。
Jupyter
恢复针对远程 Jupyter 内核的单元格执行
如果单元格仍在忙于执行,即使在关闭 VS Code 后重新打开笔记本,Jupyter 扩展程序现在支持恢复针对远程 Jupyter 内核的单元格执行。
例如,假设您执行一个长时间运行的代码段,例如针对远程 Jupyter 内核的模型训练。这可能需要几分钟或更长时间,因此您可能决定在此期间关闭 VS Code。几分钟后,重新启动 VS Code 并打开相同的笔记本,如果单元格仍在忙于执行,则此状态会反映在笔记本单元格中,并且任何新的输出都会显示在单元格输出中。
另一方面,如果单元格在 VS Code 关闭时完成了执行,则在此期间生成的输出将不会保留在笔记本中。以这种方式恢复执行并显示新输出仅限于简单输出,例如纯文本、HTML、图像等。不支持恢复小部件和其他此类复杂输出的状态。
GitHub Pull Requests 和 Issues
在 GitHub Pull Requests and Issues 扩展程序上取得了更多进展,该扩展程序允许您处理、创建和管理拉取请求和问题。亮点包括
- 用于查看已签出 PR 的差异的两个新操作:将基本分支与拉取请求头部进行比较(只读)和将拉取请求头部与本地分支进行比较。
- 新的设置
"githubPullRequests.pullPullRequestBranchBeforeCheckout"
可用于在再次签出同一分支时关闭拉取以前签出的 PR 分支。
查看扩展程序的 0.66.0 版本的更改日志,了解其他亮点。
预览功能
在 insiders.vscode.dev 上的项目范围 JS/TS IntelliSense
vscode.dev 是一个完全在浏览器中运行的 VS Code 的轻量级版本。在此迭代中,我们显着丰富了 vscode.dev 的 JavaScript 和 TypeScript 支持,以便它可以分析工作区中的所有文件,而不是仅限于当前打开的文件。这极大地改进了代码导航,使您可以转到定义和查找所有对符号的引用。它还通过确保遵循您的 tsconfig.json
/ jsconfig.json
中的设置来改进 IntelliSense。我们现在甚至在编写代码时支持自动导入。
在下面的图像中,引用视图正在显示工作区中对 ITextDocument
的所有引用。
这些新的 IntelliSense 功能适用于您从本地计算机打开的文件夹以及您使用 vscode.dev 的内置 GitHub 存储库扩展程序打开的 GitHub 存储库。
请记住,vscode.dev 上的 JS/TS IntelliSense 仍然存在一些限制
- 当前不支持第三方库的 IntelliSense。
- 当前不支持 JavaScript 项目的自动类型获取。
- 由于上述限制,vscode.dev 上禁用了所有类型错误。
- 项目范围的 IntelliSense 目前仅在 vscode.dev 的 Insiders 版本上启用:
insiders.vscode.dev
。此功能目前在github.dev
上禁用。
我们计划在未来解决这些限制,并很高兴继续丰富我们在 Web 上的 JavaScript 和 TypeScript 支持!
终端中的图像
现在,终端中已提供对图像的实验性支持。终端中的图像通常通过将图像像素数据编码为文本来实现,然后通过特殊的转义序列写入终端。目前支持的协议有 sixel 和 iTerm 首创的内联图像协议。
通过设置以下内容启用此功能:
"terminal.integrated.experimentalImageSupport": true
启用后,要测试此功能,您可以从 libsixel 仓库 下载并使用 cat
命令查看一个 .six
示例文件。
或者,使用 imgcat python 包 或 imgcat 脚本 处理 png、gif 或 jpg 文件。
此功能的当前限制有:
- 序列化不起作用,因此重新加载终端将不会保留任何图像(已在 jerch/xterm-addon-image#47 中跟踪)。
- 将选择内容复制为 HTML 不包括选定的图像(已在 jerch/xterm-addon-image#50 中跟踪)。
- 动画 GIF 不起作用(已在 jerch/xterm-addon-image#51 中跟踪)。
- 短于一个单元格的图像将无法正常工作,这是序列的 设计缺陷,并且也发生在 XTerm 中。
TypeScript 5.2 支持
此更新包括对即将发布的 TypeScript 5.2 的支持。查看 TypeScript 5.2 迭代计划,了解有关 TypeScript 团队当前正在进行的工作的更多详细信息。一些令人兴奋的即将推出的工具亮点包括:
- 一个新的 内联常量 重构。
- 一个新的 移动到文件 重构,允许您将符号移动到现有文件中。
要开始使用 TypeScript 5.2 夜间构建版本,请安装 TypeScript Nightly 扩展。
JavaScript 和 TypeScript 的“移动到文件”重构
TypeScript 5.2 夜间构建版本中的 移动到文件 重构允许您将类、函数或常量移动到现有文件中。这也会自动更新对该符号的所有引用,并根据需要更新导入。
当您选择 移动到文件 时,VS Code 会显示当前 TypeScript 或 JavaScript 项目中的所有文件列表。您可以开始键入以快速找到所需的文件。
或者,您可以使用 选择现有文件... 来使用普通的文件选择器选择文件,或使用 输入新文件路径... 来指定应创建的新文件。
此功能仍在积极开发中,请试用并分享您的反馈!
WebAssembly 在 VS Code Web 版中
为了在 vscode.dev 中添加更多编程语言支持,VS Code 团队一直在研究如何在 Web 版 VS Code 中运行通用的 WebAssembly。如果您对此方法感兴趣并想了解更多信息,请查看最近的 VS Code 和 WebAssembly 博客文章。
扩展创作
改进了本地文件的 vscode.fs 性能
当您使用 vscode.fs
API 处理文件时(您应该这样做!),对扩展主机本地文件的操作现在将更快地完成。
以前,扩展主机将这些操作委托给 VS Code 客户端执行,但现在它们直接在扩展主机内部执行,从而节省了往返时间。
更严格的状态栏 API
用于创建状态栏项的 API createStatusBarItem
允许扩展传递一个标识符。此标识符用于控制状态栏项的隐藏和显示。对于扩展,标识符应该是唯一的,但到目前为止,这并未强制执行。在此版本中,我们使其更加严格,由同一扩展使用相同标识符创建的状态栏项现在将合并为一个。
任务
在任务完成时 关闭 终端的任务演示选项已最终确定。
提议的 API
每个里程碑都带有新的建议 API,扩展作者可以试用它们。与往常一样,我们需要您的反馈。以下是试用建议 API 的步骤:
- 找到您要试用的提案,并将其名称添加到
package.json#enabledApiProposals
。 - 使用最新的 @vscode/dts 并运行
npx @vscode/dts dev
。它会将相应的d.ts
文件下载到您的工作区。 - 您现在可以针对该提案进行编程。
您无法发布使用建议 API 的扩展。下一个版本中可能会有重大更改,我们永远不希望破坏现有扩展。
EnvironmentVariableCollection.description
此提案允许为 EnvironmentVariableCollection
指定描述,该描述会在终端选项卡悬停时向用户显示,解释更改的具体内容。
// Example of what the Git extension could use
context.environmentVariableCollection.description = 'Enables a Git authentication provider';
EnvironmentVariableMutator.options
此提案添加了可以提供给 EnvironmentVariableMutator
的选项,允许您指定何时应用环境变量更改,无论是在进程创建时还是在 shell 集成脚本中(在 shell 初始化脚本运行后)。
const collection = context.environmentVariableCollection;
// Apply only when the process is created
collection.replace('FOO', 'bar');
// Apply only during the shell integration script
collection.replace('FOO', 'bar', {
applyAtProcessCreation: false,
applyAtShellIntegration: true
});
// Apply twice, during process creation and the shell integration script
collection.replace('FOO', 'bar', {
applyAtProcessCreation: true,
applyAtShellIntegration: true
});
共享提供程序
共享 API 提案 允许扩展提供在 VS Code 中共享资源的方法。
共享提供程序结果目前显示为顶级的 共享... 命令面板操作,以及 命令中心 附近的新图标,前提是您已选择加入 "workbench.experimental.share.enabled": true
和 "window.commandCenter": true
。
您可以在 API 提案问题 #176316 中留下反馈。
静态状态栏项
状态栏项现在可以通过 package.json#contributes/statusBarItems
静态贡献。通过此贡献点,扩展可以延迟其激活,并且仅在与状态栏项交互时(例如,在命令上)激活。激活后,扩展可以通过 vscode.window.createStatusBarItem
API 访问其静态状态栏项。
workspace.save 和 workspace.saveAs
保存编辑器 API 提案 允许扩展触发将编辑器保存到其资源或要求用户提供资源的流程。
所有保存方法都将返回结果 Uri
,如果操作已取消,则返回 undefined
。除非已关联路径,否则未命名文件始终会要求用户提供目标位置。
身份验证 authGetSessions 建议的 API
随着我们越来越接近 支持多个 GitHub 帐户,我们有一个新的建议身份验证 API,它允许您的扩展获取特定范围的一组所有可访问会话。这些 API 添加的提案有几个值得注意的地方:
- 引入
vscode.authentication.getSessions
来获取您的扩展可以访问的每个帐户的会话。如果您想请求其他帐户,请使用{ createIfNone: true, clearSessionPreference: true }
来要求用户选择一个帐户。 forceNewSession
属性现在可以接受{ sessionToRecreate: session }
对象,以便使用者扩展可以指定它们要重新创建的确切会话。- 身份验证提供程序实现的
createSession
函数现在将传入要重新创建的会话(如果forceNewSession
的值为true
,则使用扩展的会话首选项)。
为了使其能够在 GitHub 身份验证扩展中采用,仍需要完成更多工作,因此,如果您有兴趣,可以关注并 在该提案的跟踪问题中提供反馈。
窗口活动 API
新的 API 可用于在窗口变为活动或非活动状态时通知扩展。这可用于释放或创建持久资源或进程,这些资源或进程可以闲置以节省资源。
这是通过向现有的 WindowState
类型添加新的 active
布尔值来实现的。
vscode.window.onDidChangeWindowState(state => {
if (state.active && !longRunningProcess) {
longRunningProcess = startLongRunningProcess();
} else if (!state.active && longRunningProcess) {
longRunningProcess.end();
longRunningProcess = undefined;
}
});
工程
为所有用户启用 Electron 沙箱
我们很高兴地宣布,Electron 沙箱正在向我们所有用户推出。这是一个从 2020 年初开始的旅程,现在终于结束了。您可以参考 将 VS Code 迁移到进程沙箱 博客文章,了解更多详细信息。
扩展主机重启参与
工作台中的某些操作可能会导致扩展主机重启,而无需重新加载当前窗口。例如,当您切换配置文件时,VS Code 会重启扩展主机以处理该配置文件运行的不同扩展集。
但是,某些自定义编辑器和笔记本编辑器在切换配置文件后可能不再起作用,因为该配置文件中未安装所需的扩展。如果编辑器有未保存的更改,则可能会导致数据丢失。作为修复,VS Code 中的组件现在可以参与扩展主机重启,并确保在扩展主机重启之前保存任何未保存的更改。
我们计划在下一个里程碑中进一步开发此体验,因此请继续关注更多信息!
Windows 8 和 8.1 支持已结束
如我们的 v1.77 发行说明 中所述,v1.79
是支持 Windows 8 / Windows Server 2012 和 Windows 8.1 / Windows Server 2012 R2 的最后一个版本。有关其他信息,请参阅我们的 FAQ。
里程碑自动化
我们在所有 GitHub 存储库中实施了自动里程碑复制。这意味着在 microsoft/vscode
中建立的每月里程碑是所有其他创建和维护的里程碑的基础。
Microsoft Build 上的 VS Code
如果您没有机会观看 Microsoft Build 2023 直播,您可以在 Microsoft Developer YouTube 频道上观看主题演讲和会议。
一些 VS Code 用户特别感兴趣的会议包括:
- 使用 Microsoft 云为开发人员提供的下一代 AI
- 使用 Visual Studio Code 从任何地方进行开发
- 充分利用 GitHub Copilot 的实用技术
- 将云和 AI 的强大功能注入您的开发工作流程
值得注意的修复
- 165933 [emmet] 2023 年的 http-equiv="X-UA-Compatible"
- 181889 treeView.reveal 与 expand: 3 仅展开第一个 3 级文件夹
感谢
最后但同样重要的是,非常感谢 VS Code 的贡献者。
问题跟踪
对我们的问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @starball5 (starball)
- @IllusionMH (Andrii Dieiev)
- @tamuratak (Takashi Tamura)
拉取请求
对 vscode
的贡献
- @akbyrd (Adam Byrd): 修复 msCompile 问题匹配器的问题 PR #182167
- @ashgti (John Harrison): 修复调试输出提示显示为 'object Object' 的问题 PR #181964
- @benibenj (Benjamin Simmonds): 修复 TreeView 复选框状态设置为 0 的问题 PR #183342
- @bitekas (Viktor Korsun): 修复 Pseudoterminal onDidClose 示例 PR #180026
- @dan-petty (Daniel Petty): 修复无法为 Windows 上的内置配置文件指定自定义路径的问题 PR #175464
- @dcourv (Dylan): 修复 #181207 - 向扩展查看器底部添加内边距 PR #181723
- @DoctorKrolic: 添加
JSON Lines
语言定义 PR #183035 - @dyedgreen (Tilman Roeder): 修复:打开文件夹或工作区时将路径编码为 URI 组件 PR #182398
- @ElectricRCAircraftGuy (Gabriel Staples): 所有颜色主题:也将注释文档字符串视为注释 PR #182162
- @gjsjohnmurray (John Murray)
- 修复
security.restrictUNCAccess
设置描述中的拼写错误 PR #182842 - 当路径没有父级时,防止工作区文件夹选择器中出现重复文本(修复 #183418)PR #183427
- 修复
- @hermannloose (Hermann Loose)
- 为已解决和未解决的注释添加单独的概览标尺颜色 PR #181520
- 修复注释图标的颜色描述 PR #181628
- @iAnujParajuli (Anuj Parajuli): 为音频文件添加 #181652 html 音频标签 PR #183328
- @jacekkopecky (Jacek Kopecký)
- 添加固定宽度制表符的设置 PR #181729
- 修复制表符大小调整:当最后一个制表符关闭时恢复制表符宽度 PR #183188
- @jackpunt (Ganesh)
- 添加一个设置以将文件标记为只读(不可编辑)PR #161716
- #181708 的 isReadonly() 优先级 PR #181955
- @jairbubbles (Julien Richard): 修复 diff 行内模式中已删除行的上下文菜单 PR #182542
- @jeanp413 (Jean Pierre)
- 修复 ITerminalService#getActiveOrCreateInstance 返回一个已释放的终端 PR #180451
- 修复重新加载后终端编辑器为空的问题 PR #182121
- 修复终端不考虑编辑器背景颜色的问题 PR #182557
- 修复当结果超过 1000 个时,终端查找行为的改进 PR #182917
- 修复按
esc
时无法隐藏终端查找小部件的问题 PR #183090 - 修复终端不再持久化的问题 PR #183516
- @Juneezee (Eng Zer Jun): 重构(userDataSync): 将
indexOf
替换为includes
PR #182635 - @markw65
- 修复任务启动竞争 PR #180546
- 使 _activeTasks 相对于 _executeTask 同步 PR #180617
- @max06 (Flo): 修复:在 shell 集成中将 bash 语法更改为 fish 语法 PR #181637
- @r3m0t (Tomer Chachamu)
- 交互式窗口 - 不要为插入工具栏留下空间 PR #181949
- 防止内嵌提示和编辑器内容之间的连字 (修复 #170449) PR #182379
- @rehmsen (Ole): 添加 F10 键绑定用于调试器单步执行,即使在 Web 上也是如此。 PR #183510
- @soulshined (David Freer): PHP 代码片段的质量和连续性 PR #174889
- @TheSylvester (Sylvester Wong): 在未提供描述时,添加使用代码片段主体作为描述的功能 #181115 PR #181381
- @tisilent (xie jialong 努力鸭)
- 修改 innerWidth PR #180480
- 修复贡献的配置文件图标 PR #182615
- 修复 #182702 PR #182705
- @ugultopu (Utku Gultopu): 向 Git 扩展添加相似性阈值选项 PR #178266
- @vadimcn: 在工作区状态中保留断点 ID PR #182704
- @Viijay-Kr (Vijaya Krishna): 修复:#169151 如果没有断点,则回退到编辑器悬停 PR #181274
- @Yash-Singh1 (Yash Singh): 功能:.vuerc 作为 json 文件 PR #153017
- @yshaojun: 修复:通过添加 unbalancedBracketScopes(#_168110) 修复 perl 括号对 PR #181203
对 vscode-css-languageservice
的贡献
- @romainmenke (Romain Menke): css 嵌套:增加支持 PR #345
对 vscode-js-debug
的贡献
- @NotAndOr (notandor): 使用指定的用户数据目录参数启动浏览器,无需目录连接。 PR #1656
对 vscode-pull-request-github
的贡献
- @kabel (Kevin Abel): 简化
AuthProvider
枚举 PR #4779 - @SKPG-Tech (Salvijus K.): 在模板中添加缺少的索引 PR #4822
- @unknovvn (Andzej Korovacki): 使用 git 设置在 checkoutExistingPullRequestBranch 中签出前获取 PR #4759
对 monaco-editor
的贡献
- @dlitsman (Dmitry Litsman): 扩展“在边距中渲染字形”示例以包含透明颜色注释。 PR #3945
- @dneto0 (David Neto): 避免 WGSL 词法分析器中的 hack PR #3887
- @spahnke (Sebastian Pahnke)
- @titouanmathis (Titouan Mathis): Webpack 插件修复注入到 ESM 文件中的 CJS PR #3933