2022 年 9 月(版本 1.72)
下载:Windows:x64 Arm64 | Mac:通用 Intel 硅芯片 | Linux:deb rpm tarball Arm snap
更新 1.72.1:此更新解决了这些安全问题。
更新 1.72.2:此更新解决了这些问题。
欢迎使用 Visual Studio Code 2022 年 9 月版。此版本包含许多更新,我们希望您会喜欢。一些主要亮点包括
- 工具栏自定义 - 隐藏/显示工具栏操作。
- 改进的编辑器自动滚动行为 - 滚动速度根据光标位置调整。
- 扩展视图更新 - 突出显示有更新或需要注意的扩展。
- 树状视图中的搜索结果 - 在列表或树状视图中查看搜索结果。
- 嵌套 Git 仓库支持 - 检测并显示嵌套的 Git 子模块。
- 终端快速修复 - 提供更正命令拼写错误和设置上游远程仓库的建议。
- 固定常用任务 - 将任务固定到“运行任务”下拉列表的顶部以快速访问。
- Markdown 链接验证 - 自动检查标题、文件和图像链接。
- GitHub Enterprise Server 身份验证 - 改进的登录工作流程不再需要 PAT。
- 开发容器功能 - 轻松为开发容器添加和共享功能。
- VS Code 社区讨论 - 与其他 VS Code 扩展作者交流。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
预览体验成员: 想尽快尝试新功能吗?您可以下载每晚构建的 预览体验成员版本,并在最新更新可用时立即试用。
工作台
隐藏工具栏中的操作
现在您可以隐藏工具栏中的操作。右键单击工具栏中的任何操作,然后选择其隐藏命令或任何切换命令。隐藏的操作将移动到“...
更多操作”菜单中,可以从那里调用。要还原菜单,请右键单击工具栏按钮区域,然后选择“重置菜单”命令。要还原所有菜单,请从命令面板运行“重置所有菜单”(⇧⌘P(Windows、Linux Ctrl+Shift+P))。
在下面的视频中,GitLens 扩展的“文件注释”菜单从编辑器工具栏中隐藏,然后通过“重置菜单”还原。
合并编辑器
选择使用三向合并编辑器
在审查了我们收到的所有合并编辑器反馈并全面考虑了体验后,我们决定在检测到冲突时,默认情况下不显示三向合并编辑器(git.mergeEditor
设置现在为 false
)。此决定的原因可以在 issue #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
- 要跳过验证的链接 glob 列表。如果您链接到磁盘上不存在但在 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 中组织链接定义
Markdown 文件的新“组织链接定义”代码操作(source.organizeLinkDefinitions
)会将所有链接定义分组到文件底部,按字母顺序排序,并删除任何未使用的链接定义。可以使用“源操作”命令运行此操作。
例如,在 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 标题现在可以被检测到并在笔记本“大纲”视图中呈现。
VS Code for the Web
浏览器地址栏中的“code”
现在有一个 Chrome/Edge 浏览器扩展,使您可以更轻松地在 vscode.dev 中打开您的 GitHub 仓库。
开始使用
- 从 Chrome 网上应用店安装扩展。
- 在浏览器搜索栏中键入
code
以激活地址栏。 - 按名称搜索 GitHub 仓库,然后按 Enter。建议由您的浏览器搜索历史记录填充,因此如果您想要的仓库没有出现,您也可以键入完全限定的
<owner>/<repo>
名称以打开它,例如microsoft/vscode
。
在下面的视频中,用户通过键入 code vscode
在 vscode.dev
中打开 microsoft/vscode
仓库。
此扩展的灵感来自 Goto GitHub Repo Chrome 扩展,并对此表示衷心感谢,该扩展由前 VS Code 团队成员 Pine Wu 创建。
切换开发环境时随身携带您的更改
当您浏览 GitHub 或 Azure Repos 仓库(例如 https://vscode.dev/github/microsoft/vscode)时,您可以使用 继续处理 命令选择要与您的仓库一起使用的其他开发环境。
以前,如果您的虚拟工作区中有未提交的更改,您需要将它们推送到 GitHub 或 Azure Repos 以在其他地方查看它们。在此里程碑中,我们已将 编辑会话 集成添加到“继续处理”功能中,以便您的未提交更改自动随您移动到目标开发环境,例如 GitHub 代码空间
在下面的视频中,当用户创建并切换到在新的 GitHub 代码空间中工作时,他们在使用 VS Code for the Web 时对 JavaScript 文件所做的更改将被应用。
在此版本中,当您首次将“继续处理”与未提交的更改一起使用时,您可以选择使用 编辑会话 将您的编辑带到您选择的开发环境,编辑会话 使用 VS Code 服务来存储您的待处理更改。这些更改在应用于您的目标开发环境后会从我们的服务中删除。如果您选择在不使用未提交的更改的情况下继续,您可以随时通过配置 "workbench.editSessions.continueOn": "prompt"
设置来更改此首选项。
当您使用 VS Code for the Web 时,当您在以下位置使用“继续处理”时,您的未提交更改将随您移动
- GitHub Codespaces 中的新云托管环境
- GitHub 仓库的新本地克隆
- 具有相同虚拟 GitHub 仓库的本地 VS Code 实例
当您将桌面 VS Code 与 Remote Repositories 扩展一起使用时,当您在以下位置使用“继续处理”时,您的未提交更改将随您移动
- GitHub Codespaces 中的云托管环境(通过 GitHub Codespaces 扩展可用)
- GitHub 仓库的新本地克隆
- 容器卷中 GitHub 仓库的新克隆(通过 Dev Containers 扩展可用)
- https://vscode.dev
- 包含仓库克隆的现有本地文件夹
问题报告
问题字符阈值增加到 7500 个字符
当使用内置问题报告器报告 VS Code 或扩展的问题时,用于在 github.com 上打开问题的 URL 中的字符数有限制。如果您达到此限制,您将在问题正文中看到一条消息,指出 We have written the needed data into your clipboard because it was too large to send. Please paste.
。不幸的是,一些用户没有注意到此消息,并且忘记将数据粘贴到问题正文中。
在此里程碑中,我们将阈值增加到 7500 个字符。这是因为
- 某些对 URL 中的字符数有硬性限制的浏览器不再受支持 (EOL)。
- GitHub 对 URL 中的字符数有自己的限制。
这几乎使 URL 中包含的字符数增加了两倍,这对于大多数用户来说应该足够了,并且粘贴板消息将较少显示。
问题报告器与“正在运行的扩展”编辑器一起使用
如果您使用命令“开发人员:显示正在运行的扩展”打开“正在运行的扩展”编辑器,然后选择“报告问题”按钮,它将显示内置问题报告器。以前,这将带您进入 GitHub 问题并要求您粘贴,并在扩展仓库中创建了许多不必要且质量差的问题。扩展的“报告问题”按钮现在通过内置问题报告器,将允许用户提交高质量的扩展问题。
扩展贡献
远程开发
远程开发扩展允许您使用开发容器、远程计算机或 Windows Linux 子系统 (WSL) 作为功能齐全的开发环境。
我们听取了您对 Remote - WSL 和 Remote - Containers 扩展命名的反馈。我们希望其名称中的 Remote
表示您在“远程”或“单独”的 WSL 发行版或开发容器中进行开发,而不是传统的本地开发。但是,这与许多人使用的“远程”用法不同,并且可能会导致混淆(例如,开发容器是否在我的机器上?)。
因此,我们已更新这些扩展中的命名和产品内命令,使其更清晰,将其重命名为 WSL 和 开发容器。市场和文档中的扩展标识符等链接保持不变,因此您不应看到当前对这两个扩展的使用中断。
除了重命名之外,这些扩展的功能和修复工作也在继续进行。您可以在 远程开发发行说明中了解更多信息。
开发容器功能
开发容器功能 让您可以轻松地将预先打包的功能添加到您的开发容器中。无论是 Git 或 Docker 等工具,还是对 Go 或 Java 等编程语言的支持,您都可以查看可用功能列表,并将它们添加到您的 devcontainer.json
中。您还可以创建自己的功能,使用 功能模板 发布并与他人共享。
GitHub Pull Requests and Issues
在 GitHub Pull Requests and Issues 扩展方面取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。此版本的亮点包括
- 改进了对 GitHub Enterprise Server 的支持。这包括
- 借助 VS Code 内置 GitHub Enterprise Server 身份验证提供程序,实现无 PAT 身份验证。
- 当您打开具有 Enterprise 仓库的文件夹时自动检测,并提供设置引导。
- 修复了 GitHub Enterprise Server 错误。
- 用于将文件标记为已查看的复选框。
查看扩展 0.52.0 版本的更新日志,了解其他亮点。
GitHub Issue Notebooks
工作区编辑
GitHub Issue Notebooks 扩展展示了笔记本 API,并且也被证明非常方便。本着这种精神,我们采用了工作区编辑 API 的最新改进。有新的代码操作
- 将单元格移动/复制到新笔记本。
- 允许您使用 OR 语句拆分单元格。
- 使用代码片段编辑将限定值(如
label:bug
)提取到变量中。 - 用于值设置错误的代码片段式快速修复。
本地化
此扩展现已完全本地化为 VS Code 支持的 13 种语言。它也是第一个使用新的 本地化 API 进行本地化的扩展,这意味着本地化在桌面和 Web 上均可运行。
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 and Issues 扩展一起使用)。这是一个繁琐的过程,需要用户离开 VS Code 创建 PAT,确保他们使用正确的权限创建了 PAT,复制它,然后将其粘贴回 VS Code 中。
现在不用了。现在,GitHub Enterprise Server 登录流程与 github.com 登录流程相同,用户无需创建 PAT 即可登录 GitHub Enterprise Server。要查看实际操作体验,您可以从 Marketplace 获取 GitHub Pull Requests and 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 或在 issue #116740 中评论来向我们提供您的反馈。
设置配置文件指示器
VS Code 在活动栏底部显示设置配置文件指示器。默认情况下,配置文件名称的前两个字符显示在指示器中。您还可以将简称自定义为任意两个字符或表情符号或 codicon。codicon 可以使用 $(codicon-id)
语法引用。
单击此指示器时会显示一个菜单,其中包含更改简称选项。
同步设置配置文件
VS Code 现在支持跨 VS Code 实例同步设置配置文件。
注意:此功能目前仅在 VS Code 的 Insiders 版本中可用。
WebAssembly 和 Web 中的 Python 执行
在过去几个月中,我们致力于将 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 扩展,支持在 Web 版 VS Code 中运行 Python 文件(例如 vscode.dev 和 insiders.vscode.dev)。该扩展在 Marketplace 中以 Experimental - Python for the Web 的形式提供。一个限制是您要执行的 Python 代码需要托管在 GitHub 存储库中。
下面的屏幕截图显示了运行 Hello World
程序
您还可以使用命令 Python WASM: 启动 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 编辑笔记本
工作区编辑现在可以使用 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
创建文件时指定内容。为此,请传递带有其 options-bag 的内容
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 添加新的上下文菜单项,请首先在新的 webview/context
部分下的 menus
中添加一个新条目。每个贡献都包含一个 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
data 属性(或在 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 更好地支持您的渲染器。
Refactor.move 代码操作类型
新的 refactor.move
代码操作类型可用于移动代码的重构(例如,将符号移动到新文件或重新排序文件中的代码)。
虽然扩展以前可以创建 refactor.move
类型的代码操作,但现在正式记录了此类型,并且 受到新的代码操作控制的支持。
传递给 view/title 操作的选定树项
贡献给 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 本身以及扩展和 webview 都将从中受益。
跨域隔离目前位于功能标志后面,启用它可能会对从 Internet 加载资源的扩展和 webview 产生不良影响。您可以在 为什么您需要“跨域隔离”来实现强大功能 中阅读有关此内容的更多信息。我们希望尽早听到您的反馈。
要尝试此操作
- 使用
--enable-coi
标志运行 VS Code 桌面版,例如 code --enable-coi`。 - 运行 vscode.dev 并附加
vscode-coi
查询。
要检查是否启用了跨域隔离,请使用 DevTools 的“应用程序”选项卡或检查 crossOriginIsolated 全局变量的值。
改进的启动性能
我们在这个里程碑中预留了工程时间,以改善从启动 VS Code 到在文本编辑器中看到闪烁光标的启动时间。我们始终跟踪我们的性能数字,并注意到上一个里程碑末尾出现了一些轻微的下降,我们想解决这个问题。
这是一项团队努力,每个人都在整个源代码中贡献各种更改。这里提到了一些亮点。
不再进行同步 fs 调用
我们通常避免使用 Node.js fs
API 的同步变体,因为我们知道这些方法会停止脚本执行,直到文件系统请求得到解决。但是,在少数情况下,我们仍然依赖同步 fs
执行,尤其是在启动时打开或恢复窗口时。我们能够将所有这些调用更改为异步变体,从而允许其他脚本在等待文件系统请求返回时继续运行。
更多主入口点的捆绑
构成 VS Code 应用程序的主要捆绑包有几兆字节大小,使用 vscode-loader 捆绑为单个文件,并使用 esbuild 缩小。但是,在某些情况下,我们没有投入捆绑,特别是对于
- Electron 主进程中始终首先调用的 Node.js 入口点。
- Electron 渲染器进程中用于打开窗口的引导 JavaScript 文件。
在这两个领域中进行捆绑使我们能够将启动时查找 JavaScript 文件的成本降低到 Electron 主进程的一个调用和窗口本身的一个调用。
将代码推迟到后期阶段
最佳的性能修复是删除代码并且永远不运行它,但这显然不是一个可扩展的解决方案。另一种方法是将代码的执行延迟到后期阶段,例如在文本编辑器打开之后。在这个里程碑中,我们再次审查了我们的各种组件,并将其中一些组件推迟到后期阶段,以不阻止关键的启动路径。
记录内部工具
为了分析性能,我们大量使用浏览器的 DevTools 和 OS 检查工具。但是,我们也有一些内置于 VS Code 中的工具。我们在 VS Code 开发的性能工具 中记录了自定义工具,以便更多人可以从中受益。
更快的 PR 检查
对于拉取请求,我们运行自动单元、集成和冒烟测试。所有这些都并行发生,但每个步骤都要求我们的 TypeScript 源代码被转译为 JavaScript 代码。最初,我们使用 TypeScript 编译器来实现这一点。它发出 JavaScript,但也进行类型检查。后者非常耗时,对于测试来说并不是真正需要的。测试延迟的总时间成本约为 5 分钟。然后,我们切换到使用 TypeScript 编译器 API 的自定义仅转译解决方案。这要快得多,但仍然需要大约 2 分钟。
在这个里程碑中,我们切换到了 SWC (Speedy Web Compiler),它甚至更快。现在转译我们所有的 TypeScript 源代码大约需要 12 秒。这是一个巨大的改进,使我们能够更快地获得有关拉取请求的反馈。
值得注意的修复
- 27799 macOS:OS 服务无法从编辑器中选取选定的文本
- 60821 改进了打开最近的文件与“开始使用”页面的最近列表之间的同步。
- 156777 保持进程资源管理器打开时,每分钟 5MB 的内存泄漏
- 159862 在 macOS Catalina 上,当处于全屏模式时,交通灯按钮显示未对齐
- 161305 查看其他窗口设置时,“窗口:标题栏样式”链接不起作用
感谢
最后但同样重要的是,衷心感谢 VS Code 的贡献者。
Issue 跟踪
对我们的 Issue 跟踪的贡献
- 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() 检查中识别 windows-controls-overlay 显示模式 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):杂项:在 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):特性: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