2022 年 9 月(版本 1.72)
下载:Windows:x64 Arm64 | Mac:通用 英特尔 硅 | Linux:deb rpm tarball Arm snap
更新 1.72.1:此更新解决了这些安全 问题。
更新 1.72.2:此更新解决了这些 问题。
欢迎使用 2022 年 9 月发布的 Visual Studio Code。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 工具栏自定义 - 隐藏/显示工具栏操作。
- 改进的编辑器自动滚动 - 滚动速度已根据光标位置进行调整。
- 扩展视图更新 - 突出显示需要更新或需要关注的扩展。
- 树视图中的搜索结果 - 在列表视图或树视图中查看搜索结果。
- 嵌套 Git 存储库支持 - 检测并显示嵌套的 Git 子模块。
- 终端快速修复 - 针对命令错误拼写和设置上游远程的建议。
- 固定常用任务 - 将任务固定到“运行任务”下拉菜单的顶部,以便快速访问。
- Markdown 链接验证 - 自动检查标题、文件和图像链接。
- GitHub Enterprise Server 身份验证 - 改进的登录工作流程不再需要 PAT。
- 开发容器功能 - 轻松添加和共享开发容器的功能。
- VS Code 社区讨论 - 与其他 VS Code 扩展作者建立联系。
如果您想在线阅读这些发行说明,请访问 更新 页面,该页面位于 code.visualstudio.com。
内部人员:希望尽快尝试新功能?您可以下载 nightly 内部人员 版本,并在新功能可用时立即试用。
工作台
隐藏工具栏中的操作
您现在可以隐藏工具栏中的操作。右键单击工具栏中的任何操作,然后选择其隐藏命令或任何切换命令。隐藏的操作将移动到“...”更多操作菜单中,并且可以从那里调用。要还原菜单,请右键单击工具栏按钮区域,然后选择重置菜单命令。要还原所有菜单,请从命令面板运行重置所有菜单 (⇧⌘P (Windows、Linux Ctrl+Shift+P))。
在下面的视频中,GitLens 扩展的文件注释菜单已从编辑器工具栏中隐藏,然后通过重置菜单恢复。
合并编辑器
选择使用三方合并编辑器
在审查了我们收到的所有合并编辑器反馈,并对整体体验进行了思考之后,我们决定默认情况下不显示三方合并编辑器(git.mergeEditor
设置现在为 false
),当检测到冲突时。此决定的原因可在 问题 #160806 中找到。
对于有冲突的文件,用户现在可以选择在合并编辑器中解决以打开三方合并编辑器。
CodeLens UI
用户反馈表明复选框存在一些 UX 问题。复选框的可发现性很差,并且由于没有正确地表示所有可能的状态而造成了混淆。在这次迭代中,我们切换到 CodeLens UI,它使用文本标签(接受传入、接受当前、接受两者)。
我们将继续迭代此设计,并密切关注我们收到的所有反馈。
从头开始重新计算结果文件
在上次迭代中,我们尝试将合并编辑器设计为具有冲突文件的备用视图。它不是显示冲突标记,而是使用单独的编辑器窗格显示冲突的详细信息。此设计有一个优点,即打开合并编辑器不会修改磁盘上的文件,并且用户在打开合并编辑器之前所做的更改可以保留。不幸的是,这不仅令人困惑,而且在所有情况下都无法正常工作,因为我们的合并算法和 Git 合并算法没有完全一致。
在此版本中,如果在合并编辑器中打开带有冲突标记的文件,我们将首先使用我们的合并算法重新计算结果文件,而不插入任何冲突标记。单方面冲突会自动解决,而适当的冲突将重置为两个版本的共同祖先,并标记为未处理。
基本视图
合并编辑器现在有一个单独的基本视图,可用于将任何一方与共同祖先进行比较。
树视图查找控件改进
您现在可以垂直移动树视图查找控件,以便访问它后面的 UI 元素。在树视图中按 ⌥⌘F (Windows、Linux Ctrl+Alt+F) 以显示查找控件。
此外,树视图查找控件将在重新打开时记住上次搜索词。
某些音频和视频文件的内置预览
VS Code 现在支持预览某些音频和视频文件格式。
目前支持以下音频格式
- WAV
- MP3
- Ogg
- FLAC
并且可以预览以下视频格式
- H.264
- VP8
对于视频文件,请记住,视频和音频轨道的媒体格式必须都受支持。例如,许多 .mp4
文件使用 H.264 进行视频编码,使用 AAC 进行音频编码。VS Code 将能够播放 .mp4
文件的视频部分,但由于不支持 AAC 音频,因此不会发出任何声音。您需要使用 MP3 作为音频轨道。
禁用增量命名
您现在可以使用 explorer.incrementalNaming
设置的新 disabled
值在文件资源管理器中禁用增量文件命名。此值会禁用在文件资源管理器中粘贴时更改文件名的逻辑。如果文件名已存在,系统将提示您覆盖现有文件,类似于大多数本机资源管理器。
在 VS Code 应用程序文件夹内编辑时的警告
在 VS Code 应用程序文件夹内编辑文件时,编辑器中现在会显示警告。意外修改应用程序文件夹中的文件是一个常见错误,通常不是用户想要的操作。
编辑器
改进的自动滚动行为
选择并拖动时,编辑器的滚动方式以前取决于显示器的每秒帧数 (FPS),有时会导致编辑器在鼠标到达编辑器边缘时立即快速滚动。现在,编辑器以更易于管理的速度自动滚动,大约每秒滚动一个视窗,当鼠标靠近边缘时,当鼠标远离编辑器时滚动速度更快,与 FPS 无关。
在下面的视频中,滚动速度随着鼠标光标向下远离编辑器而增加。
改进的悬停
编辑器悬停以前非常积极地隐藏自己,尤其是在鼠标经过编辑器的空区域时。这使得难以触及悬停中显示的某些操作。现在,只要鼠标朝着悬停移动,悬停就会保持可见。设置 "editor.hover.sticky": false
会恢复到之前的行为。
在右侧的“之后”视频中,更容易从悬停中选择快速修复。
新的代码操作组
在 代码操作控件 中有两个新的组可用,分别是 Inline
和 Move
。
这些组对应于 refactor.inline
和 refactor.move
代码操作种类。
新的代码操作颜色
您可能会注意到,代码操作控件 在这次迭代中也略有不同。其样式已更新,以使用更合适的主题颜色。最大的变化是控件主体现在使用editorWidget.*
颜色而不是menu.*
。
我们仍在完善这些颜色,如果您发现它们在特定主题中效果不佳或缺少任何颜色自定义选项,请告知我们。
扩展
最近更新的扩展
VS Code 现在在扩展视图的更新部分的最近更新部分中显示过去 7 天内更新的扩展。
需要关注的扩展
VS Code 现在在扩展视图的默认已安装部分中将需要关注的扩展排序到顶部。这包括待更新的扩展,或者已更新或已禁用并需要 VS Code 重新加载的扩展。
活动栏中的扩展图标上的徽章现在显示需要关注的扩展数量。
忽略扩展的更新
您现在可以通过单击更新下拉菜单中的忽略更新按钮来忽略扩展的更新。这将从需要关注的扩展列表中删除该扩展。
您可以通过取消选中相同的忽略更新按钮来撤消此操作。
请注意,安装特定版本的扩展(通过安装其他版本)也会忽略该扩展的更新。
已安装扩展的排序
您现在可以按安装次数、评级、名称、发布日期和更新日期对已安装扩展列表进行排序。
搜索
以树状视图显示结果
您现在可以以树状视图查看搜索结果!只需单击搜索视图右上角的列表/树图标,即可在列表和树状视图之间切换。
主题:夜猫子浅色(在 vscode.dev 上预览)
文件装饰设置
在搜索结果中,现在可以打开或关闭反映文件状态的文件名徽章和颜色。设置是搜索> 装饰:徽章(search.decorations.badges
)和搜索> 装饰:颜色(search.decorations.colors
)。
主题:夜猫子浅色(在 vscode.dev 上预览)
源代码管理
发现嵌套的 Git 仓库
为了解决一个长期存在的特性请求,在这个里程碑中,我们对仓库发现进行了更改,以添加对嵌套 Git 仓库的支持。根据嵌套仓库的位置,您可能需要修改git.repositoryScanMaxDepth
设置(默认值为 1 级)。
添加对带密码的 SSH 密钥的支持
当使用带密码的 SSH 密钥进行 Git 操作时,VS Code 现在将显示快速输入控件,以便您可以输入 SSH 密钥的密码。密码不会被缓存,每次执行 Git 操作时都必须输入。
检出前拉取
在这个里程碑中,我们添加了一个新设置git.pullBeforeCheckout
,以简化切换分支的过程。启用此设置后,如果没有任何未推送的提交,我们将在检出分支之前从远程拉取并快进分支。
仓库获取改进
对于具有多个远程的 Git 仓库,调用获取命令现在将显示一个带有所有远程列表的快速选择。用户可以选择要获取的特定远程或从所有远程获取。
中止合并命令
有一个新的命令Git:中止合并,用于中止当前正在进行的合并操作。
终端
终端快速修复
我们开始推出一个由 shell 集成驱动的名为快速修复的新功能。此功能提供音频提示支持。使用audioCues.terminalQuickFix
启用它,以便在有修复程序可用时发出声音提示。
当命令映射到用户可能采取的一组操作时,快速修复程序可用,并且可以通过与编辑器中使用的相同键绑定激活Ctrl+. 或 Cmd+.。
以下是最初支持的快速修复程序
类似的 Git 命令
当 Git 命令输入错误时,快速修复程序会建议类似的命令。
Git 设置上游
当执行git push
并且没有上游远程时,快速修复程序会建议使用上游远程参数进行推送。
Git 创建 PR
当分支第一次推送到远程时,快速修复程序会建议打开链接以创建 PR。
空闲端口
当使用已在使用的端口启动服务器时,快速修复程序会提供一个操作来终止进程并释放端口。
Shell 集成改进
对 shell 集成进行了以下改进
- 运行最近命令和转到最近目录现在将在行中包含内容(或无法可靠地确定)时清除行。
- 删除了 bash 脚本中对
$PREFIX
环境变量的使用,该变量可能会与某些构建工具发生冲突。 - 完善了 zsh 脚本,以修复
$ZDOTDIR
周围的一些极端情况。 - 在多个用户共享的机器上更好地处理 zsh shell 集成。
超链接支持
终端中运行的应用程序发送的超链接现在得到支持。这些允许显示指向 URL 的标签,并显示为带下划线的虚线
以下是如何编写一个标签为“VS Code”的链接,该链接指向https://vscode.js.cn的示例
printf '\e]8;;https://vscode.js.cn\e\\VS Code\e]8;;\e\\'
或者更一般地
\x1b]8;; <URL> \x1b\ <Label> \x1b]8;;\x1b\'
VT 功能支持
此版本支持以下 VT 转义序列
DECRQM
:ANSI 和 DEC 私有模式报告(CSI Ps $ p
) - 此序列允许程序查询终端处于的各种模式,例如回绕或方括号粘贴模式。DECSCA
:保护属性(CSI Ps " q
) - 此属性确定DECSED
和DECSEL
是否可以擦除内容。
音频铃声
音频铃声现在可以在终端中使用,可以通过terminal.integrated.enableBell
启用。
终端文档
终端文档已重构并移至VS Code 网站上的单独目录中。
现在有针对以下方面的主题
- 终端基础 - 快速了解 VS Code 集成终端。
- 终端配置文件 - 了解如何通过配置文件自定义终端。
- Shell 集成 - VS Code 可以提供命令状态、历史记录和快速导航等功能。
- 外观 - 修改终端文本和光标样式以及颜色。
- 高级 - 对自定义键绑定以及 Unicode 和表情符号字符提供高级支持。
希望您在需要时能够轻松找到正确的文档。
任务
固定运行任务条目
可以在任务:运行任务列表中固定任务,以便更快更轻松地访问。
任务完成声音
任务完成后会播放声音,以支持多任务处理并提高可访问性。可以通过audioCues.taskCompleted
设置配置音频提示。
语言
Markdown 链接验证
在使用 Markdown 时,很容易错误地添加无效的文件链接或图像引用。也许您忘记了文件名使用了-
(破折号)而不是_
(下划线),或者您要链接到的文件已移动到不同的目录。通常您只有在查看 Markdown 预览或发布后才会发现这些错误。VS Code 的新 Markdown 链接验证可以帮助发现这些错误。
要开始使用,请设置"markdown.validate.enabled": true
。VS Code 现在将分析指向标题、图像和其他本地文件的 Markdown 链接。无效链接将被报告为警告或错误。
VS Code 甚至可以发现指向其他 Markdown 文件中特定标题的无效链接!
您可以使用一些设置来自定义链接验证
markdown.validate.fileLinks.enabled
- 启用/禁用对指向本地文件的链接的验证:[link](/path/to/file.md)
markdown.validate.fragmentLinks.enabled
- 启用/禁用对指向当前文件中的标题的链接的验证:[link](#_some-header)
markdown.validate.fileLinks.markdownFragmentLinks
- 启用/禁用对指向其他 Markdown 文件中标题的链接的验证:[link](other-file.md#some-header)
markdown.validate.referenceLinks.enabled
- 启用/禁用对引用链接的验证:[link][ref]
。markdown.validate.ignoredLinks
- 要跳过验证的链接通配符列表。如果您链接到磁盘上不存在但在 Markdown 发布后存在的文件,这将很有用。
试一试,让我们知道您对新功能的看法!
将 Markdown 提取到链接定义
引用链接 使您能够轻松地在 Markdown 源中多次使用相同的链接
This [link][example-link] and [this link][example-link] both point to the same place!
[example-link]: http://example.com
这很方便,因为您只需更改文件中的一个位置,就可以更新这两个链接。
新的提取到链接定义重构有助于您将现有的 Markdown 链接转换为链接定义和引用链接。此重构将转换当前文档中链接的所有出现。例如,对于 Markdown 文档
[Markdown](https://daringfireball.net/projects/markdown/) and you: Adventures in [Markdown linking](https://daringfireball.net/projects/markdown/)!
对https://daringfireball.net/projects/markdown/
链接中的任一链接运行提取到链接定义将导致
[Markdown][md] and you: Adventures in [Markdown linking][md]!
[md]: https://daringfireball.net/projects/markdown/
运行重构后,VS Code 将提示您输入链接定义的名称。在上面的示例中,我们输入了md
。
在 Markdown 中组织链接定义
新的组织链接定义代码操作(source.organizeLinkDefinitions
)用于 Markdown 文件,将所有链接定义分组到文件底部,按字母顺序对其进行排序,并删除任何未使用的定义。这可以使用源操作命令运行。
例如,在 Markdown 源中
Some [link][example] and an image:
![An image of a cat][cat-gif]
[example]: http://example.com
[cat-gif]: /keyboard-cat.gif
[some unused link]: http://example.com/file2
运行组织链接定义将
Some [link][example] and an image:
![An image of a cat][cat-gif]
[cat-gif]: /keyboard-cat.gif
[example]: http://example.com
请注意,未使用的some unused link
定义已被删除,其余定义已按字母顺序排序。
CSS / LESS / SCSS
CSS 语言支持现在了解@property 和@layer at-rules。
笔记本
笔记本 JavaScript 输出现在被评估为模块
笔记本中的 JavaScript 输出现在被视为模块。这意味着在输出中声明的变量将不再泄漏到其他输出中(在const
变量的情况下,甚至可能会阻止其他具有冲突变量名称的输出运行)。
这也意味着您现在可以在 JavaScript 输出中使用import
%%javascript
import { myFunction } from './myModules.js';
console.log(myFunction());
笔记本大纲中支持的 HTML 标题
Markdown 单元格中的 HTML 标题现在可以在笔记本的 **大纲** 视图中检测到并呈现。
适用于 Web 的 VS Code
浏览器地址栏中的“code”
现在有一个 Chrome/Edge 浏览器扩展,可以更轻松地在 vscode.dev 中打开您的 GitHub 存储库。
入门
- 从 Chrome 网上应用店安装扩展。
- 在浏览器搜索栏中键入
code
以激活地址栏。 - 按名称搜索 GitHub 存储库并按 Enter。建议由您的浏览器搜索历史记录填充,因此如果您想要存储库未出现,您也可以键入完整的限定
<owner>/<repo>
名称来打开它,例如microsoft/vscode
。
在下面的视频中,用户通过键入 code vscode
在 vscode.dev
中打开 microsoft/vscode
存储库。
此扩展的灵感来自 Goto GitHub Repo Chrome 扩展,该扩展由 Pine Wu 创建,他是 VS Code 团队的前成员。
在切换开发环境时将更改带走
当您浏览 GitHub 或 Azure Repos 存储库(例如 https://vscode.dev/github/microsoft/vscode)时,您可以使用 继续使用 命令选择要与存储库一起使用的其他开发环境。
以前,如果您在虚拟工作区中有未提交的更改,则需要将它们推送到 GitHub 或 Azure Repos 才能在其他地方查看它们。在这个里程碑中,我们向 **继续使用** 功能添加了 **编辑会话** 集成,这样您的未提交的更改就会自动随您一起迁移到目标开发环境,例如 GitHub codespace。
在下面的视频中,用户在使用 VS Code for the Web 时对 JavaScript 文件所做的更改在他们创建并切换到新 GitHub codespace 中工作时被应用。
在此版本中,您第一次使用带有未提交更改的 **继续使用** 时,您将可以选择使用 **编辑会话** 将您的编辑带到您选择的开发环境,该会话使用 VS Code 服务来存储您的待处理更改。这些更改将在应用于目标开发环境后从我们的服务中删除。如果您选择在没有未提交的更改的情况下继续,您始终可以稍后通过配置 "workbench.editSessions.continueOn": "prompt"
设置来更改此首选项。
当您使用 VS Code for the Web 时,您的未提交的更改将在您在以下情况下使用 **继续使用** 时随您一起迁移
- GitHub Codespaces 中的新云托管环境
- 您 GitHub 存储库的新本地克隆
- 具有相同虚拟 GitHub 存储库的本地 VS Code 实例
当您使用带有 远程存储库 扩展的桌面 VS Code 时,您的未提交的更改将在您在以下情况下使用 **继续使用** 时随您一起迁移
- GitHub Codespaces 中的云托管环境(可通过 GitHub Codespaces 扩展获得)
- 您 GitHub 存储库的新本地克隆
- 容器卷中您 GitHub 存储库的新克隆(可通过 Dev Containers 扩展获得)
- https://vscode.dev
- 包含您存储库克隆的现有本地文件夹
问题报告
将问题阈值提高到 7500 个字符
当使用内置问题报告器报告 VS Code 或扩展程序的问题时,用于在 github.com 上打开问题的 URL 中的字符数有限制。如果您达到此限制,您将在问题主体中看到一条消息,提示 由于数据太大而无法发送,我们已将必要数据写入剪贴板。请粘贴。
。不幸的是,有些用户没有注意到这条消息,忘记将数据粘贴到问题主体中。
在这个里程碑中,我们将阈值提高到了 7500 个字符。这是因为
- 某些对 URL 中字符数有严格限制的浏览器不再受支持(EOL)。
- GitHub 对 URL 中的字符数也有自己的限制。
这几乎将 URL 中包含的字符数增加了两倍,对于大多数用户来说应该足够了,剪贴板消息将显示得更少。
问题报告器与运行扩展编辑器一起使用
如果您使用命令 **开发者:显示正在运行的扩展** 打开 **正在运行的扩展** 编辑器,然后选择 **报告问题** 按钮,它将显示内置问题报告器。以前,这会将您带到一个 GitHub 问题并要求您粘贴,并在扩展存储库中创建了许多不必要的和质量低劣的问题。扩展的 **报告问题** 按钮现在将通过内置问题报告器,并允许用户提交高质量的扩展问题。
对扩展的贡献
远程开发
远程开发扩展允许您使用开发容器、远程计算机或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
我们已经收到了您关于 **远程 - WSL** 和 **远程 - 容器** 扩展命名的反馈。我们原本希望扩展名称中的 远程
表示您在“远程”或“独立”的 WSL 发行版或开发容器中进行开发,而不是传统的本地开发。但是,这与许多人使用的“远程”的用法不同,可能会造成混淆(例如,开发容器在我的机器上吗?)。
因此,我们已更新了这些扩展的命名和产品内命令,使其更加清晰,将其重命名为 WSL 和 Dev Containers。市场和文档中的扩展标识符等链接保持不变,因此您在当前使用这两个扩展时不应该看到中断。
除了重命名之外,这些扩展的功能和修复工作也在继续。您可以在 远程开发版本说明 中了解更多信息。
Dev Container 功能
Dev Container 功能 使您可以轻松地将预打包的功能添加到您的开发容器中。无论是 Git 或 Docker 等工具,还是 Go 或 Java 等编程语言的支持,您都可以查看 可用功能 列表并将它们添加到您的 devcontainer.json
中。您还可以使用 功能模板 创建自己的功能以发布和与他人共享。
GitHub 拉取请求和问题
GitHub 拉取请求和问题 扩展有了更多进展,它允许您处理、创建和管理拉取请求和问题。此版本的亮点包括
- 对 GitHub Enterprise Server 的支持得到改进。这包括
- 借助 VS Code 内置的 GitHub Enterprise Server 身份验证提供程序实现无 PAT 身份验证。
- 当您打开带有 Enterprise 存储库的文件夹时自动检测,以及设置的入门坡道。
- 针对 GitHub Enterprise Server 错误的修复。
- 用于将文件标记为已查看的复选框。
查看扩展 0.52.0 版本的变更日志,以了解其他亮点。
GitHub 问题笔记本
工作区编辑
GitHub 问题笔记本 扩展展示了笔记本 API,并且也证明非常方便。本着这种精神,我们采用了工作区编辑 API 的最新改进。有一些新的代码操作可以
- 将单元格移动/复制到新的笔记本中。
- 允许您使用 OR 语句拆分单元格。
- 使用片段编辑将合格的值(如
label:bug
)提取到变量中。 - 针对值集错误的基于片段的快速修复。
本地化
该扩展现在已完全本地化为 VS Code 支持的 13 种语言。它也是第一个使用新的 本地化 API 本地化的扩展,这意味着本地化在桌面和网络上都适用。
Jupyter
单元格标签和幻灯片编辑支持
我们现在可以直接在笔记本编辑器中编辑单元格标签和幻灯片类型,而无需打开文档的 JSON 格式。
这使我们能够为 papermill 参数化笔记本或为 nbconvert 自定义笔记本。
我们现在还可以通过命令直接更新笔记本单元格的幻灯片类型,将笔记本转换为幻灯片以进行演示。
以上两个示例都使用 笔记本工作区编辑 API 编辑单元格元数据。如果您对如何支持编辑其他自定义单元格元数据感兴趣,可以从 GitHub 存储库 (cell-tags、slideshow) 中了解更多信息。
改进的交互式窗口命令交互
interactive.input.focus
命令现在将使最近使用的交互式窗口的输入框获得焦点。在下面的简短视频中,命令正在使用自定义键盘快捷键。
交互式窗口单元格的笔记本 **删除** 单元格命令已启用,现在可以撤消。
Python 文件单元格折叠
用 # %%
标记表示的 Python 文件中的“单元格”现在可以在编辑器中折叠。
GitHub Enterprise Server 身份验证支持
以前,GitHub Enterprise Server 用户需要手动创建一个个人访问令牌 (PAT) 才能登录 VS Code 中的 GitHub Enterprise Server(例如,用于 GitHub Pull Requests 和 Issues 扩展)。这是一个繁琐的过程,需要用户离开 VS Code 创建 PAT,确保他们以正确的权限创建了 PAT,然后复制并粘贴回 VS Code。
现在不再需要了。现在,GitHub Enterprise Server 登录流程与 github.com 登录流程相同,用户无需创建 PAT 即可登录 GitHub Enterprise Server。要查看此体验的实际操作,您可以从 Marketplace 获取 GitHub Pull Requests 和 Issues 扩展,将 github-enterprise.uri
设置设置为您的 GitHub Enterprise Server URI,然后尝试一下。以下视频演示了新的体验
主题:Panda Theme(在 vscode.dev 上预览)
Python
创建环境命令
添加了一个新的 **创建环境** 命令,该命令将自动为 VS Code 中的 Python 用户创建虚拟环境或 conda 环境。用户可以通过命令面板触发该命令,选择他们是否要使用 venv 创建新的虚拟环境或使用 Conda 创建环境,最后选择他们项目所需的解释器。该命令还会安装项目文件夹中 requirements.txt
文件中概述的必要包。我们希望此新功能可以简化环境创建过程,并鼓励用户利用环境来进行最佳编码实践。
供扩展作者使用的新的环境 API
Python API 现在为扩展提供了一种方法,使扩展可以与 Python 扩展找到的用户计算机中可用的 Python 环境一起使用。扩展还可以使用它访问 Python 扩展用来运行脚本的所选环境路径,或将其更新为他们首选的路径。
请随时在 issue #18888 中提供您的反馈。请注意,API 尚未最终确定,因此可能会根据反馈进行更改,并且不会提供向后兼容性。
Python 扩展模板
该 Python 扩展模板 可帮助您为最喜欢的 Python 工具(如 linter、格式化程序或代码分析工具)构建 Visual Studio Code 扩展。该 模板 提供了构建扩展所需的构建模块,这些扩展可以将您的工具集成到 VS Code 中。
预览功能
设置配置文件
在过去几个月里,我们一直在努力在 VS Code 中支持 **设置配置文件**,这是社区中最受欢迎的请求之一。此功能可以通过 workbench.experimental.settingsProfiles.enabled
设置进行预览。试用一下,并通过在 vscode 存储库 中创建问题或在 issue #116740 中发表评论来向我们提供您的反馈。
设置配置文件指示器
VS Code 在活动栏的底部显示一个设置配置文件指示器。默认情况下,指示器中会显示配置文件名称的前两个字符。您也可以将简短名称自定义为任意两个字符,或者自定义为表情符号或 codicon。可以使用 $(codicon-id)
语法引用 codicon。
当您单击此指示器时,会显示一个菜单,其中包含一个 **更改简短名称** 选项。
同步设置配置文件
VS Code 现在支持在您的 VS Code 实例之间同步设置配置文件。
注意:此功能目前仅在 Insiders 版 VS Code 中可用。
WebAssembly 和 Python 在 Web 中的执行
在过去的几个月里,我们一直在努力将 WebAssembly (WASM) 引入 VS Code。为了启用支持,我们进行了两项工作
- 使扩展能够执行 WebAssembly 代码的库。WebAssembly 可以透明地访问工作区中的文件和 VS Code 终端。这些库是在 vscode-wasm 存储库 中开发的,并在 npm 上发布为
@vscode/sync-api-common
、@vscode/sync-api-client
、@vscode-sync-api-service
和@vscode/wasm-wasi
。这些存储库的 README 文件包含有关如何使用这些库的示例。 - 一个支持在 VS Code for the Web(例如 vscode.dev 和 insiders.vscode.dev)中运行 Python 文件的 VS Code 扩展。该扩展在 Marketplace 中可用,名为 Experimental - Python for the Web。一个限制是,您要执行的 Python 代码需要托管在 GitHub 存储库中。
下面的屏幕截图显示了运行 Hello World
程序
您还可以使用命令 **Python WASM: Start REPL** 启动 Python REPL。
请注意,库和扩展都处于开发阶段,并作为预览提供。WebAssembly Python 解释器以及 VS Code 本身都存在一些限制。解释器的主要限制包括
- 不支持 pip。
- 不支持套接字。
- 不支持线程。因此,也不支持异步。
但是,支持创建自己的 Python 环境,包括源轮 Python 包。有关详细信息,请查看扩展的 README。
VS Code 的限制包括
- 不支持调试。您只能运行 Python 文件。
- 不支持本机 Python 模块。
但请继续关注。我们正在努力解决其中一些限制。
扩展开发
在干净的环境中调试扩展
调试扩展时,一直存在一个问题,即扩展是在扩展作者的开发环境(用户设置和已安装的扩展)中运行的,而不是在更适合扩展的目标用户的环境中运行的。
借助最近推出的“配置文件”功能,现在可以通过在扩展的调试配置中指定配置文件,在不同的环境中运行正在开发的扩展。启用 workbench.experimental.settingsProfiles.enabled
设置以启用配置文件功能。
支持两种场景
- 在干净的环境中调试,方法是使用一个未命名的“空”配置文件,该配置文件将在扩展调试停止时自动删除。
- 在受控的环境中调试,方法是使用一个已为正在开发的扩展专门创建的命名配置文件,该配置文件包含特定的用户设置和扩展。
此调试配置显示了如何使用 --profile-temp
开关在干净的环境中调试
{
"name": "Extension",
"type": "extensionHost",
"request": "launch",
"args": ["--profile-temp", "--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "npm: watch"
}
以下是一个在使用名为“extensionContext”的先前创建的配置文件的受控环境中调试的调试配置
{
"name": "Extension",
"type": "extensionHost",
"request": "launch",
"args": ["--profile=extensionContext", "--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"preLaunchTask": "npm: watch"
}
请注意,在远程位置(通过 远程开发 扩展 Dev Containers、SSH 或 WSL)调试扩展时,使用 --profile-temp
标志将导致显示以下状态消息
这是预期的,因为临时配置文件不包含任何扩展,这意味着远程开发扩展也不存在。对于远程场景,建议您创建一个空的命名配置文件,向其中添加远程开发扩展,然后使用 --profile=....
命令行选项。
改进的工作区编辑 API
使用 WorkspaceEdit 编辑笔记本
WorkspaceEdit 现在可以使用 vscode.NotebookEdit
修改笔记本。vscode.NotebookEdit
类包含用于创建编辑的静态工厂函数,这些编辑可以插入、替换和删除笔记本中的单元格
const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
const edit = new vscode.WorkspaceEdit();
// Use .set to add one or more edits to the notebook
edit.set(currentNotebook.uri, [
// Create an edit that inserts one or more cells after the first cell in the notebook
vscode.NotebookEdit.insertCells(/* index */ 1, [
// ... new notebook cell data
])
// Additional notebook edits...
]);
await vscode.workspace.applyEdit(edit);
}
使用 WorkspaceEdit 执行片段编辑
新的 SnippetTextEdit
类型允许扩展使用 WorkspaceEdit
执行片段编辑。片段编辑类似于常规文本编辑,但它们允许用户在占位符之间切换,插入变量,从选择元素中选择等。了解有关片段的更多信息,请参阅 本指南
请注意,片段编辑需要代码或笔记本编辑器,并且只能支持单个编辑器的片段编辑,否则它们的行为将与常规文本编辑相同。
我们相信,将片段编辑和工作区编辑结合起来可以实现新的、更无缝的代码操作和重构,例如以下示例来自 GitHub Issue Notebooks 扩展。
使用 WorkspaceEdit 创建包含内容的文件
您现在可以使用 WorkspaceEdit
在创建文件时指定内容。为此,请使用其选项包传递内容
const edit = new vscode.WorkspaceEdit();
edit.createFile(newFileUri, { contents: new Unit8Array([1, 2, 3]) });
await vscode.workspace.applyEdit(edit);
贡献的 Webview 上下文菜单
新的 Webview 上下文菜单 API 使高级 Webview 可以轻松自定义用户在 Webview 中右键单击时显示的上下文菜单。此新的贡献点使用 VS Code 的普通上下文菜单,因此自定义菜单可以与编辑器的其他部分完美融合。Webview 还可以为 Webview 的不同部分显示自定义上下文菜单。
要向您的 Webview 添加新的上下文菜单项,请首先在 menus
下的 webview/context
部分添加新条目。每个贡献都接受一个 command
(也是项目标题的来源)和一个 when
子句。when 子句 应包含 webviewId == 'YOUR_WEBVIEW_VIEW_TYPE'
以确保上下文菜单仅应用于您的扩展的 Webview
"contributes": {
"menus": {
"webview/context": [
{
"command": "catCoding.yarn",
"when": "webviewId == 'catCoding'"
},
{
"command": "catCoding.insertLion",
"when": "webviewId == 'catCoding' && webviewSection == 'editor'"
}
]
},
"commands": [
{
"command": "catCoding.yarn",
"title": "Yarn 🧶",
"category": "Cat Coding"
},
{
"command": "catCoding.insertLion",
"title": "Insert 🦁",
"category": "Cat Coding"
},
...
]
}
在 Webview 中,您还可以使用 data-vscode-context
数据属性(或在 JavaScript 中使用 dataset.vscodeContext
)为 HTML 的特定区域设置上下文。data-vscode-context
值是一个 JSON 对象,它指定在用户在元素上右键单击时要设置的上下文。最终上下文是通过从文档根目录到单击的元素确定的。
例如,请考虑以下 HTML
<div class="main" data-vscode-context='{"webviewSection": "main", "mouseCount": 4}'>
<h1>Cat Coding</h1>
<textarea data-vscode-context='{"webviewSection": "editor", "preventDefaultContextMenuItems": true}'></textarea>
</div>
如果用户在 textarea
上右键单击,将设置以下上下文
webviewSection == 'editor'
- 这将覆盖来自父元素的webviewSection
。mouseCount == 4
- 这是从父元素继承的。preventDefaultContextMenuItems == true
- 这是一个特殊的上下文,它隐藏了 VS Code 通常添加到 Webview 上下文菜单中的复制和粘贴条目。
如果用户在 <textarea>
内右键单击,他们将看到
Webview 中活动主题的新主题变量
Webview 中的新 data-vscode-theme-id
数据属性存储当前活动主题的 ID。这将替换现在已弃用的 data-vscode-theme-name
属性,该属性跟踪主题的完整名称(并且也可能已本地化)
body[data-vscode-theme-id="One Dark Pro"] {
background: hotpink;
}
如果您在 Webview 中使用 data-vscode-theme-name
,请迁移到新的 data-vscode-theme-id
属性。
异步笔记本渲染器
现在,笔记本渲染器 API 更好地支持异步笔记本渲染器。虽然这在以前是隐式支持的,但现在 renderOutputItem
可以返回一个 Promise
来指示输出项正在渲染。renderOutputItem
函数现在也传递了一个 AbortSignal,如果渲染被取消,它将被中止。
renderOutputItem(outputItem: OutputItem, element: HTMLElement, signal: AbortSignal): void | Promise<void>;
如果您的渲染器执行任何异步工作,请采用这些 API 更新,以便 VS Code 可以更好地支持您的渲染器。
重构.move 代码操作种类
新的 refactor.move
代码操作种类可用于将代码移动到其他位置的重构操作(例如,将符号移动到新文件或在文件内重新排序代码)。
虽然扩展程序以前可以创建 refactor.move
种类的代码操作,但此种类现在已正式记录,并且 受新的代码操作控件支持。
传递给视图/标题操作的选定树项
贡献给 view/title
菜单的命令将接收两个参数:第一个是聚焦的树节点,第二个是树中所有选定的项。
树视图 initialSize 贡献最终确定
在 package.json
中贡献视图的扩展程序可以使用 initialSize
属性来设置其视图的初始大小。initialSize
的工作原理与 CSS 的 flex-grow
类似。
对何时应用 initialSize
有一些限制
- 它仅仅是初始大小。一旦视图被渲染,
initialSize
将不再被应用。 - 它只在扩展程序同时拥有视图和视图容器时应用。
树视图Badge最终确定
TreeView
具有一个可选的 viewBadge
属性,可用于在视图的视图容器上设置数字徽章。
未绑定断点的警告图标
调试扩展程序现在可以定义一个提示消息,当存在具有未绑定断点的活动调试会话时。它将出现在断点视图的标题中,以及将鼠标悬停在编辑器中的灰色断点图标上时。以下是如何在 js-debug
扩展程序中使用它的示例
此消息可以在调试器贡献中的新 strings
属性中声明,如下所示
"strings": {
"unverifiedBreakpoints": "Message text goes here"
}
VS Code 社区讨论
现在有一个 VS Code 社区讨论 网站,供扩展程序作者作为聚会场所,提出问题、与其他开发人员建立联系并展示出色的工作。在那里,您可以找到与 VS Code API 相关的 公告,发布问题或搜索现有答案,并查看 扩展展示和讲述。
建议的 API
每个里程碑都伴随着新的 API 建议,扩展程序作者可以尝试使用它们。一如既往,我们希望收到您的反馈。以下是在尝试使用 API 建议的步骤
- 找到您想尝试的建议 并将它的名称添加到
package.json#enabledApiProposals
中。 - 使用最新的 vscode-dts 并运行
vscode-dts dev
。它将下载相应的d.ts
文件到您的工作区。 - 您现在可以使用该建议进行编程。
您不能发布使用 API 建议的扩展程序。下一个版本中可能会出现重大更改,我们不想破坏现有扩展程序。
可扩展的 JavaScript 笔记本渲染器
我们内置的 笔记本渲染器 现在公开了一个实验性 API,允许扩展程序自定义 JavaScript 内容的渲染。此 API 目前公开了一个钩子 preEvaluate
,它在评估 JavaScript 内容之前被调用。
要尝试使用此实验性 API,您的扩展程序 需要扩展 vscode.builtin-renderer API。
"contributes": {
"notebookRenderer": [
{
"id": "vscode-samples.my-custom-js-extension",
"displayName": "My custom javascript renderer extension",
"entrypoint": {
"extends": "vscode.builtin-renderer",
"path": "./out/main.js"
}
}
]
}
然后,您的渲染器可以在 vscode-builtin-renderer
上注册一个渲染钩子
import type { RendererContext } from 'vscode-notebook-renderer';
export async function activate(ctx: RendererContext<void>) {
const builtinRenderer = await ctx.getRenderer('vscode.builtin-renderer');
if (!builtinRenderer) {
throw new Error(`Could not load 'vscode.builtin-renderer'`);
}
builtinRenderer.experimental_registerJavaScriptRenderingHook({
// Invoked before th js has been evaluated
preEvaluate(outputItem: OutputItem, element: HTMLElement, script: string, signal, signal: AbortSignal): string | undefined | Promise<string | undefined> {
// You can either modify `element` or return a new script source here
}
});
}
测试这个新的 API 并让我们知道您的想法!
用于 env.shell 更改的事件
新事件 env.onDidChangeShell
已被添加以补充 env.shell
,即为扩展程序宿主检测到的默认 shell
env.onDidChangeShell(newShell => {
console.log(newShell); // Same value as env.shell
});
树项复选框
提议的 checkboxState
允许您在树项中添加复选框。
this.checkboxState = {
state: vscode.TreeItemCheckboxState.Unchecked,
tooltip: 'mark file as viewed'
};
API 中的本地化
在这个迭代中,我们引入了一个新的 API 来帮助扩展程序本地化字符串。这将替换以前用于本地化的 vscode-nls
和 vscode-nls-dev
模块。这些模块将继续工作,但不会再收到任何功能。新的 API 和工具旨在熟悉,但也更易于使用且更灵活。此外,将它作为 VS Code API 的一部分,使我们能够为台式机版 VS Code 和 Web 版 VS Code 的扩展程序提供本地化支持。
VS Code 扩展程序的本地化包含四个重要部分
新的 vscode.l10n API
declare module 'vscode' {
export namespace l10n {
/**
* A string that can be pulled out of a localization bundle if it exists.
*/
export function t(message: string, ...args: any[]): string;
/**
* A string that can be pulled out of a localization bundle if it exists.
*/
export function t(options: {
message: string;
args?: any[];
comment: string[];
}): string;
/**
* The bundle of localized strings that have been loaded for the extension.
*/
export const bundle: { [key: string]: string };
/**
* The URI of the localization bundle that has been loaded for the extension.
*/
export const uri: Uri | undefined;
}
}
提议的 vscode.l10n API 是一个新的命名空间,并提供一个名为 t
的单个函数,可用于声明应本地化字符串。该函数可以用字符串或具有 message
属性的对象调用。如果存在本地化包,该函数将返回本地化字符串,否则将返回原始字符串。该函数还支持用于格式化字符串的参数以及用于为翻译者提供上下文注释。
使用新 API 的简单示例
import { l10n } from 'vscode';
export function activate(context: vscode.ExtensionContext) {
const message = l10n.t('Hello in {0}!', vscode.env.language);
vscode.window.showInformationMessage(message);
}
在此示例中,如果当前语言存在本地化包,则字符串 Hello in {0}!
将被本地化。{0}
将被替换为当前语言(默认情况下为 en
,或法语为 fr
,巴西葡萄牙语为 pt-br
等)。如果不存在本地化包,则该字符串将按原样返回并使用参数进行格式化。您可能想知道这些本地化包来自哪里。我将在下一节中介绍。
vscode.l10n
API 还提供对本地化字符串包或字符串包 URI 的访问。这旨在用于子进程场景,我将在后面介绍。
重要:当您使用此 API 时,您还需要明确声明本地化包的位置。这是通过在
package.json
中添加l10n
属性来实现的
{
"main": "./out/extension.js",
"l10n": "./l10n"
}
l10n
属性应为包含本地化包的文件夹的相对路径。
模块 @vscode/l10n-dev
模块 @vscode/l10n-dev 是一个用于生成本地化包的新模块。您可以将其用作命令行工具或库。两者都用于通过扫描提供的源代码中的 vscode.l10n.t(..)
调用来生成本地化包。
以下是如何使用命令行工具的简单示例
npx @vscode/l10n-dev ./src --out ./l10n
这将在 ./l10n
文件夹中放置一个 bundle.l10n.json
文件。从那里您可以为要支持的每个区域设置创建一个 bundle.l10n.LOCALE.json
文件。例如,假设上面的命令生成以下 bundle.l10n.json
文件
{
"Hello": "Hello",
"Hello {0}": "Hello {0}",
"Hello {0}/This is a comment": {
"message": "Hello {0}",
"comment": ["This is a comment"]
}
}
如果您想支持法语,您将在 bundle.l10n.fr.json
文件中创建以下内容
{
"Hello": "Bonjour",
"Hello {0}": "Bonjour {0}",
"Hello {0}/This is a comment": "Bonjour {0}"
}
注意:您不需要本地化包中的注释,因为注释仅对翻译原始包的翻译者有用。
@vscode/l10n-dev
模块还可用于生成 XLF 文件。VS Code 团队会生成 XLF 文件,然后我们将其提供给 Microsoft 的翻译人员。然后翻译人员会将翻译后的 XLF 文件返还给我们。然后,我们使用 @vscode/l10n-dev
模块从翻译后的 XLF 文件生成本地化包。我们计划撰写一篇博文,详细介绍我们的整个本地化流程。
模块 @vscode/l10n
由于 vscode.l10n
API 仅在扩展程序宿主中可用,因此它不能在子进程中使用。为此,我们创建了一个可以在子进程中用于加载本地化包的新模块。该模块称为 @vscode/l10n,可以像这样使用它
import { l10n } from '@vscode/l10n';
// Load the translations for the current locale
l10n.config({
uri: process.env.BUNDLE_URI_FROM_EXTENSION
});
// returns the translated string or the original string if no translation is available
l10n.t('Hello World');
想法是,您的扩展程序侧代码(负责启动子进程)将使用 vscode.l10n.contents
或 vscode.l10n.uri
API 将包或包的 URI 传递给子进程。然后,子进程可以使用 @vscode/l10n
模块加载包并使用 t
函数翻译字符串。@vscode/l10n
模块使用的 t
函数也将被 @vscode/l10n-dev
模块接收,以便可以使用一个进程提取和本地化字符串。
package.nls.json 文件
关于 package.nls.json
文件,没有任何变化。它仍然用于声明应本地化的默认字符串,并且应与 package.json
相邻。您仍然可以拥有 package.nls.LOCALE.json
(其中 LOCALE 是类似于 de
或 zh-cn
的内容),如果用户将 VS Code 设置为该区域设置,则该文件中声明的字符串将首先被接收。一个小例子
您的 package.json
{
"name": "my-extension",
"version": "0.0.1",
"main": "./out/extension.js",
"l10n": "./l10n",
//...
"contributes": {
"commands": [
{
"command": "my-extension.helloWorld",
// The key is surrounded by % characters
"title": "%my-extension.helloWorld.title%"
}
]
}
}
您的 package.nls.json
{
// That same key from the package.json
"my-extension.helloWorld.title": "Hello World"
}
您的 package.nls.de.json
{
// That same key from the package.json
"my-extension.helloWorld.title": "Hallo Welt"
}
总结
这里确实有很多内容需要消化,但希望这能让您对我们在 VS Code 扩展程序中本地化所采用的方向有一个了解。
如果您想查看完整示例,可以查看 l10n-sample。
如果您有任何问题或反馈,可以在以下位置告诉我们
- vscode.l10n 的 API 建议
- 仓库 vscode-l10n(
@vscode/l10n-dev
和@vscode/l10n
模块的所在地)
日志输出通道
vscode.window.createOutputChannel
API 现在有一个新的 log
布尔选项,可用于创建仅用于记录的输出通道。
/**
* Creates a new {@link LogOutputChannel log output channel} with the given name.
*
* @param name Human-readable string which will be used to represent the channel in the UI.
* @param options Options for the log output channel.
*/
export function createOutputChannel(
name: string,
options: { readonly log: true }
): LogOutputChannel;
LogOutputChannel
支持以下方法记录消息
trace(message: string, ...args: any[]): void;
debug(message: string, ...args: any[]): void;
info(message: string, ...args: any[]): void;
warn(message: string, ...args: any[]): void;
error(error: string | Error, ...args: any[]): void;
扩展程序创建的日志输出通道在“输出”下拉视图中显示为单独的条目。写入此日志输出通道的消息以与 VS Code 日志消息相同的格式表示。
工程
走向“跨源隔离”
我们已经做了一些更改,以启用 VS Code 桌面和 vscode.dev 的跨源隔离。这将启用像共享数组缓冲区这样的强大的新功能。VS Code 本身以及扩展程序和 Web 视图都将从中受益。
跨域隔离目前处于功能标记之后,启用它可能会对从互联网加载资源的扩展和 Web 视图造成意外影响。你可以在 为什么你需要“跨域隔离”来实现强大功能 中了解更多信息。我们希望尽早听到你的反馈。
尝试此操作
- 使用
--enable-coi
标志运行 VS Code 桌面,例如code --enable-coi
。 - 运行 vscode.dev 并附加
vscode-coi
查询。
要检查跨域隔离是否已启用,请使用开发者工具的“应用程序”选项卡或检查 crossOriginIsolated 全局变量的值。
改进启动性能
我们在本里程碑中预留了工程时间来改进从启动 VS Code 到在文本编辑器中看到闪烁的光标所需的时间。我们始终跟踪我们的性能数据,并且注意到在上一个里程碑结束时性能略有下降,我们需要解决这个问题。
这是一个团队合作,每个人都在整个源代码中贡献了各种更改。这里提到了几个亮点。
不再进行同步文件系统调用
我们通常避免使用 Node.js fs
API 的同步变体,因为我们知道这些方法会停止脚本执行,直到文件系统请求得到解决。但是,在某些情况下,我们仍然依赖于同步 fs
执行,尤其是在启动时打开或恢复窗口时。我们能够将所有这些调用更改为它们的异步变体,从而允许其他脚本在等待文件系统请求返回时继续运行。
更多主入口点的捆绑
构成 VS Code 应用程序的主要捆绑包大小为几兆字节,使用 vscode-loader 捆绑为单个文件,并使用 esbuild 缩小。但是,在某些情况下,我们没有投资捆绑,特别是对于
- Electron 主进程中的 Node.js 入口点,它总是首先被调用。
- Electron 渲染器进程中的引导 JavaScript 文件,用于打开窗口。
在这两个领域进行捆绑使我们能够将启动时查找 JavaScript 文件的成本降低到对 Electron 主进程的一次调用和对窗口本身的一次调用。
将代码推迟到后期阶段
最好的性能修复方法是删除代码并永远不运行它,但显然这不是一个可扩展的解决方案。另一种方法是将代码的执行推迟到后期阶段,例如文本编辑器打开后。在本里程碑中,我们再次审查了各种组件,并将其中一些推迟到后期阶段,以避免阻塞关键的启动路径。
记录内部工具
为了分析性能,我们大量使用了浏览器的开发者工具和操作系统检查工具。但是,我们还有一些内置在 VS Code 中的工具。我们在 VS Code 开发的性能工具 中记录了自定义工具,以便更多人可以从中受益。
更快的 PR 检查
对于拉取请求,我们运行自动单元、集成和冒烟测试。所有这些都并行进行,但每个步骤都需要将我们的 TypeScript 源代码转换为 JavaScript 代码。最初,我们为此使用了 TypeScript 编译器。它会发出 JavaScript,但也会进行类型检查。后者非常耗时,对于测试来说并不是真正需要的。测试延迟的总时间成本约为 5 分钟。然后我们切换到一个使用 TypeScript 编译器 API 的自定义仅转译解决方案。这要快得多,但仍然需要大约 2 分钟。
在本里程碑中,我们切换到 SWC(快速 Web 编译器),它更快。现在转译所有 TypeScript 源代码大约需要 12 秒。这是一个巨大的改进,使我们能够更快地获得拉取请求的反馈。
值得注意的修复
- 27799 macOS:操作系统服务无法从编辑器中获取选定文本
- 60821 改进了最近打开和“入门”页面的最近列表之间的同步。
- 156777 保持进程资源管理器打开时,每分钟内存泄漏 5MB
- 159862 在 macOS Catalina 上,处于全屏模式时,交通灯按钮显示错位
- 161305 查看其他窗口设置时,“窗口:标题栏样式”链接不起作用
感谢
最后但并非最不重要的是,衷心感谢 VS Code 的贡献者。
问题跟踪
对我们的问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- RedCMD (@RedCMD)
- ArturoDent (@ArturoDent)
拉取请求
对 vscode
的贡献
- @a-stewart (Anthony Stewart)
vscode.workspace.applyEdit
应该尊重files.refactoring.autosave
配置 PR #154079- 在
isStandalone()
检查中识别窗口控件叠加显示模式 PR #160696
- @azatsarynnyy (Artem Zatsarynnyi):
server-main.js
应该尊重--port
参数 PR #161254 - @babakks (Babak K. Shandiz): 向 API 添加
onDidChangeShell
事件 PR #160900 - @Balastrong (Leonardo Montini): 处理了内联禁用断点被重新激活的情况 PR #155403
- @bvschaik (Bianca van Schaik): 修复了多行文件搜索中的错误匹配 PR #160665
- @CKeilbar (Chris Keilbart): 删除了对 PREFIX 环境变量的错误引用 PR #160909
- @Colengms (Colen Garoutte-Carson): 启用 cpp 中多行注释的自动关闭 PR #160357
- @Gerrit0 (Gerrit Birkeland)
- 为 TypeDoc 配置添加 jsonc 注册 PR #157362
- 将 typedoc.json 的模式添加到默认的 jsonValidation 中 PR #157592
- @gjsjohnmurray (John Murray)
- 允许过滤器小部件进行一些垂直移动 (#_158549) PR #158583
- 在 markdownEnumDescriptions 中渲染 ThemeIcons (codicons) (#_160496) PR #160498
- 当工作区位于 appRoot 内时显示警告横幅 (#_138815) PR #161534
- @JamieMagee (Jamie Magee): 向
cgmanifest.json
添加$schema
PR #159779 - @jeanp413 (Jean Pierre)
- 修复查找小部件应按拆分终端显示 PR #155361
- 修复“入门”演练中的损坏图像资源 PR #159144
- 修复在端口/项目/上下文中执行贡献菜单命令时的错误 PR #161295
- @juihanamshet1 (Jui Hanamshet): 为片段内联完成项添加大括号完成 PR #160567
- @Litrop: 当存在“[" 时,不要将“[" 添加到 ipv6 主机中。 PR #157009
- @MachineMitch21 (Mitch Schutt): 当
retainContextWhenHidden
启用时,使用hideFind()
和showFind()
PR #161174 - @matthewjamesadam (Matt Adam): 将 :before 装饰器的工具提示左对齐 PR #159226
- @MichaelChirico (Michael Chirico): 为 R 提供更好的配对运算符 PR #155882
- @MonadChains (MonadChains)
- 为非部分终端功能的“空命令”改进命令导航 PR #155551
- 修复 explorer.excludeGitIgnore 排除错误 PR #160611
- @mxschmitt (Max Schmitt): chore: 在 macOS e2e 测试中使用自定义调试版本的 Node.js PR #161308
- @najmiehsa (Najmieh): 编辑将不受信任的文件添加到受信任工作区时的轻微措辞模糊 PR #161168
- @Ninglo (Ninglo): 修复终端贡献模式 PR #160863
- @OtherHorizon (Blip blop): 在 cpp 中为 #if 和 #endif 添加括号支持 PR #159997
- @pdamianik (Philip Damianik): 使用全局 ZDOTDIR 环境变量 PR #159783
- @pingren (Ping)
- 在 webviews 中暴露 data-vscode-theme-id 属性,修复 #149661 PR #154635
- 在 macOS 上将选择文本写入隐藏的 textarea PR #156717
- @pkmnct (George W. Walker): 为 git merge 添加中止命令 PR #152526
- @susiwen8 (susiwen8): feat: git fetch 支持获取指定的远程仓库 PR #152197
- @tobil4sk: 在终端中优先使用 PATH 可执行文件而不是本地目录 PR #158666
- @trond-snekvik (Trond Einar Snekvik): 将属性语言的默认图标设置为配置图标 PR #158454
- @weartist (Han): 修复 #158498 PR #158657
- @Yoyokrazy (Michael Lively)
- 笔记本图像清理自动化 PR #159212
- 修复粘贴文件名逻辑中的错误 PR #159715
对 vscode-css-languageservice
的贡献
- @taroken6 (AudieTaro): 选择器可以以组合器开头 PR #279
- @wkillerud (William Killerud): 修复:处理包根目录上带有 _index 的作用域包 PR #285
对 vscode-pull-request-github
的贡献
- @Thomas1664: 添加始终在传入更改时拉取的按钮 PR #3896
对 debug-adapter-protocol
的贡献
- @KamasamaK: 使用一致的拼写 PR #332