2021 年 6 月(版本 1.58)
更新 1.58.1:此更新解决了这些安全问题。
更新 1.58.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel 硅 | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2021 年 6 月版。此版本中有许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 编辑器中的终端 - 在编辑器区域中创建或移动终端。
- 工作区信任 - 快速自定义工作区信任设置,禁用受限模式横幅。
- 编辑器滚动条自定义 - 设置滚动条可见性和宽度,单击导航行为。
- Markdown 预览中的数学公式渲染 - Markdown 预览中的数学支持。
- 设置编辑器改进 - 支持多个复选框和枚举下拉列表。
- 记住每个文件的所选环境 - 调试器会记住您之前的环境选择。
- Jupyter 交互窗口 - 直接在交互窗口中运行 Jupyter 代码。
- Jupyter 笔记本调试 - 从 VS Code 中调试 Jupyter 笔记本代码。
- 数据科学教程 - 了解 Jupyter 笔记本、PyTorch 等。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
加入我们的直播,参加 VS Code 团队的直播,时间为太平洋时间 7 月 13 日星期二上午 8 点(伦敦时间下午 4 点),观看此版本的新功能演示,并向我们提出实时问题。
内部人员: 想尽快尝试新功能吗?您可以下载每日 内部人员构建版本,并尽快尝试最新的更新。
工作台
工作区信任
工作区信任功能是 1.57 版本中的一个重大变化,我们认为开发人员可以安全地浏览代码非常重要,即使他们不熟悉源代码。这个里程碑,我们一直在吸收客户的反馈,并专注于修复问题和跟进建议。
为了帮助人们发现可以自定义工作区信任的用户设置,工作区信任编辑器的标题中有一个新的 配置您的设置 操作。此操作将显示按 @tag:workspaceTrust
过滤的设置编辑器。
说到设置,有一个新的设置可以配置横幅何时出现,指示当前窗口处于受限模式。与 security.workspace.trust.startupPrompt
设置类似,新的 security.workspace.trust.banner
允许您在熟悉工作区信任功能后禁用横幅,并且不需要提醒您正在受限模式下工作。默认情况下,此横幅每个工作区显示一次,并保持显示直到被关闭 ("untilDismissed"
)。显示受限模式横幅的其他选项是 "always"
和 "never"
。
您可以在最近的工作区信任博客文章中了解有关工作区信任的基本原理和开发的更多信息。该帖子解释了受限模式如何帮助您免受意外和潜在的恶意代码执行的侵害,并提供了一些技巧来设置您的开发机器,以便您可以快速安全地工作。
设置编辑器
此迭代为设置编辑器添加了对具有固定数量布尔属性的设置对象的支持,方法是将属性呈现为复选框列表。
此迭代还增加了对枚举数组的额外支持,通过在编辑模式下使用下拉列表而不是纯文本框。
临时工作区
现在有一种新的工作区类型,称为“临时”工作区,它的行为与通常的工作区不同,具体来说
- 重新启动或重新加载 VS Code 不会尝试再次打开工作区。
- 设置为临时的工作区不会显示在最近打开的工作区列表中。
通过在工作区 .code-workspace
文件中添加设置为 true
的 transient
属性来指定临时工作区
{
"folders": [],
"transient": true
}
设置同步
现在有一个用于设置同步的 故障排除 视图,其中包含所有日志和上次同步状态。您可以通过运行命令 设置同步:显示同步数据 并通过打开 视图 子菜单并选中 故障排除 来启用它来访问此视图
主题:GitHub 浅色主题
搜索最大结果设置
有一个新的设置 search.maxResults
,允许您设置文本搜索结果的最大数量。默认值为 20,000,高于之前的 10,000。加载大量搜索结果时,您可能会看到一些缓慢。
集成终端
编辑器区域中的终端
现在可以在编辑器区域中创建或移动终端,从而实现持久化且无论面板状态如何都保持可见的多维网格布局。
要在编辑器区域中使用终端,有几个选项
- 通过 在编辑器区域中创建终端 命令创建。
- 将终端从选项卡列表拖放到编辑器。
- 在终端处于焦点时运行 将终端移动到编辑器区域。
- 在终端选项卡上下文菜单中选择 移动到编辑器区域。
可以将新的 terminal.integrated.defaultLocation
设置为 editor
,以默认将新创建的终端定向到编辑器区域。
显式设置画布渲染器
在之前的迭代中,我们默认启用了 WebGL 终端渲染器,并将 terminal.integrated.rendererType
设置替换为更简单的 terminal.integrated.gpuAcceleration
。不幸的是,某些机器在使用 WebGL 时体验会降低,唯一可用的选择是完全禁用 GPU 加速并转到速度较慢的基于 DOM 的渲染器。现在可以将 terminal.integrated.gpuAcceleration
显式设置为 canvas
,这对于这些环境可能是首选。
隐藏链接悬停
新的 terminal.integrated.showLinkHover
设置允许您禁用终端中的链接悬停。如果您觉得终端链接上的悬停会分散注意力,这会很有用。
编辑器
编辑器滚动条自定义
有一些新的设置可以自定义编辑器的滚动条
- 使用
editor.scrollbar.horizontal
和editor.scrollbar.vertical
控制滚动条的可见性。 - 使用
editor.scrollbar.horizontalScrollbarSize
和editor.scrollbar.verticalScrollbarSize
更改其厚度。 - 使用
editor.scrollbar.scrollByPage
确定单击是按页滚动还是跳转到单击位置(默认行为)。
在编辑器下方,垂直滚动条宽度设置为 30 像素。
语言
Markdown 预览中的数学公式渲染
VS Code 的内置 Markdown 预览现在可以使用 KaTeX 渲染数学方程式。
行内数学方程式用单个美元符号包裹
Inline math: $x^2$
您可以使用双美元符号创建数学方程式块
Math block:
$$
\displaystyle
\left( \sum_{k=1}^n a_k b_k \right)^2
\leq
\left( \sum_{k=1}^n a_k^2 \right)
\left( \sum_{k=1}^n b_k^2 \right)
$$
您可以设置 "markdown.math.enabled": false
以禁用此功能。
Markdown 数学公式语法突出显示
VS Code 现在还支持在 Markdown 源代码中突出显示数学方程式
这在普通 Markdown 文件和笔记本内的 Markdown 单元格中都有效。
TypeScript 4.3.5
我们现在捆绑了 TS 4.3.5。此小更新修复了一些重要的错误,包括 JSX 中自动导入不起作用。
调试
记住每个文件的所选环境
当在没有 launch.json
文件的情况下启动调试时,VS Code 会查看活动的编辑器,并根据编辑器的语言模式决定使用哪个调试扩展。但是,对于某些语言,可以使用多个调试扩展,在这种情况下,VS Code 会提示您选择其中一个。为了使调试更顺畅,VS Code 现在会记住每个文件的所选调试器,以便下次您启动调试时,会话将在没有任何提示的情况下启动。
在下面的短视频中,用户选择 Node.js 调试环境来调试单个 JavaScript 文件,并且当该文件启动新的调试会话时会记住该选择。
调试控制台建议不再在 Enter 时接受
调试控制台建议不再在 Enter
时接受,而仅在 Shift+Enter
和 Tab
时接受。以前,当您只想评估调试控制台输入中已键入的内容时,很容易意外接受建议。
为了使 Tab
键更容易被发现为接受建议的方式,VS Code 现在在调试控制台输入中有一个提示状态栏(“插入 (Tab)”)。
扩展的贡献
Jupyter 交互窗口
我们已经开始致力于在 notebook 生态系统之上提供内置的交互式窗口体验,并且 Jupyter 扩展已在设置 jupyter.enableNativeInteractiveWindow
的情况下采用了该功能。如果启用了此功能,当从 Python 文件运行代码或直接从命令面板启动时,Jupyter 扩展将打开内置编辑器而不是 webview 实现。内置编辑器与您自定义的键绑定/键盘映射或语言扩展一起工作,因为它与工作台深度集成。
Jupyter notebook 调试
我们一直在努力支持 Jupyter notebook 中的调试,以便您可以在 notebook 单元格中设置断点、逐步执行单元格并使用所有其他 VS Code 调试器功能。这还是实验性的,但您可以通过设置 "jupyter.experimental.debugging": true
,在您选择的内核中安装 ipykernel 的第 6 版,然后单击 notebook 工具栏中的 调试 按钮来尝试它。
远程存储库
在此迭代中,我们主要专注于修复 远程存储库 扩展的错误和一些性能改进,以及与 GitHub Pull Requests and Issues 扩展的更好集成。此外,您现在可以从 远程资源管理器 中的 远程存储库 视图中删除远程存储库,并且更好地支持打开带有行范围的 \blob
URL。
GitHub Pull Requests and Issues
此迭代中 GitHub Pull Requests and Issues 扩展的重点是修复错误。查看 更改日志 以了解亮点。
远程开发
在 远程开发扩展 上的工作仍在继续,该扩展允许您使用容器、远程计算机或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
1.58 中的功能亮点包括
- 仅为转发的端口打开一次浏览器的选项。
- 对缓存镜像的
devcontainer.json
支持。 - Dev Containers 现在检查“hostRequirements”。
您可以在 远程开发发布说明 中了解新的扩展功能和错误修复。
实时预览
我们开发了一个 实时预览 扩展,它托管一个本地服务器用于 Web 开发预览!🎉
它具有编辑器内浏览器预览、实时预览刷新(在文件更改或保存时)、多根支持等等!
该扩展还有一个 Live Preview
任务,它运行一个持久服务器,允许您查看服务器流量及其关联的文件。
要了解有关它可以执行的操作的更多信息,您可以在 Marketplace 中找到详细信息,或 查看其存储库。
预览功能
TypeScript 4.4 支持
此版本包括对即将发布的 TypeScript 4.4 版本的初始支持。您可以在 TypeScript 4.4 的 TypeScript 博客 上阅读有关新语言特性和改进的更多信息。
要开始使用 TypeScript 4.4 nightly 版本,请安装 TypeScript Nightly 扩展。
请分享您的反馈,并告知我们您是否遇到 TypeScript 4.4 的任何错误。
在窗口之间移动终端
现在可以通过在一个窗口中使用 终端:分离会话 分离,并在另一个窗口中使用 终端:附加到会话 附加,在窗口之间移动终端。将来,这将有助于实现跨窗口拖放!
扩展创作
详细的完成项标签
我们添加了新的 API,用于更详细和结构化的完成项标签。您现在可以使用 vscode.CompletionItemLabel 类型作为项目标签,它允许您指定标签、详细信息和描述。
这些新属性允许语言扩展显示签名或限定符,但其他完成提供程序也可以利用此功能。例如,GitHub Pull Request and Issues 扩展现在会显示别名旁边的全名。
模态消息的详细信息
现在用于显示模态信息、警告和错误消息的 API 支持提供详细信息。详细信息文本在实际消息下方呈现,且不那么突出。
上面的对话框是用以下代码片段生成的。请注意,详细信息文本仅支持模态消息 (modal: true
)。
vscode.window.showInformationMessage('This is the message', {
modal: true,
detail:
'This is the detail. Rendered less prominent, but with more space for, well, details.'
});
贡献终端配置文件
现在,扩展可以贡献终端配置文件,它们将显示在配置文件选择器中
要贡献终端配置文件,您需要执行三项操作
首先,将贡献添加到您的 package.json
"contributes": {
"terminal": {
"profiles": [
{
"title": "Custom Profile",
"id": "custom_profile"
}
]
},
}
接下来,添加激活事件,以便在用户请求配置文件时激活扩展
"activationEvents": [
"onTerminalProfile:custom_profile"
]
最后,注册终端配置文件提供程序,该提供程序将返回用于创建终端的选项集。这些选项可以是基于标准进程的 TerminalOptions
或自定义的 ExtensionTerminalOptions
vscode.window.registerTerminalProfileProvider('custom_profile', {
provideTerminalProfile() {
return {
options: {
name: 'Profile from extension',
shellPath: 'cmd.exe'
}
};
}
});
更改基于 ExtensionTerminalOptions 的终端名称
新的 Pseudoterminal.onDidChangeName
事件允许更改使用 ExtensionTerminalOptions
创建的终端的名称。
const writeEmitter = new vscode.EventEmitter<string>();
const nameEmitter = new vscode.EventEmitter<string>();
const pty = {
onDidWrite: writeEmitter.event,
onDidChangeName: nameEmitter.event,
open: () => writeEmitter.fire('Press and key to set the terminal title'),
close: () => {
/* noop*/
},
handleInput: (data: string) => {
writeEmitter.fire(`Set title to "${data}"`);
nameEmitter.fire(data);
}
};
const terminal = (<any>vscode.window).createTerminal({ name: `My Extension REPL`, pty });
terminal.show();
为通过扩展 API 创建的终端设置图标
window.createTerminal
现在接受 iconPath
,将图标与其选项卡中的终端关联。
const term = vscode.window.createTerminal({
name: `Serve`,
iconPath: new vscode.ThemeIcon('server-process')
});
term.show();
枚举保存的 Memento 键
有一个新的 Memento.keys()
API 来枚举保存的 Memento
键的集合。此 API 可以更轻松地处理以前保存的数据,如果您需要迁移保存的数据,这将很有帮助。
语言服务器协议
发布了新版本的语言服务器协议,以及相应的 npm 模块。该版本包含 诊断拉取模型规范 的最终提案。
调试适配器协议
“内存写入”请求和“内存更改”事件的进展
我们计划在未来版本的 VS Code 调试体验中集成内存查看器。为了实现此支持,调试适配器协议 中已存在 ReadMemory
请求一段时间。我们现在正在开发相应的 WriteMemory
请求和 Memory
事件。WriteMemory
请求有一个 最终提案,将在下一个里程碑中添加到 DAP。Memory
事件提案仍在 讨论中。如果您是调试扩展作者并且对这些 DAP 协议添加感兴趣,我们感谢您的反馈。
建议的扩展 API
每个里程碑都会带来新的建议 API,扩展作者可以尝试使用它们。与往常一样,我们需要您的反馈。这是您尝试使用建议 API 必须执行的操作
- 您必须使用 Insiders 版本,因为建议的 API 会频繁更改。
- 您的扩展的
package.json
文件中必须有这一行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目源位置。
您不能发布使用建议的 API 的扩展。下一个版本中可能会有重大更改,我们永远不希望破坏现有的扩展。
富状态栏悬停
有一个新的建议 API 来支持状态栏项目上的富悬停。要尝试它,请在 StatusBarItem.tooltip2
中提供 MarkdownString
。
- 如果
MarkdownString.supportThemeIcons
为 true,则可以使用带有$(iconName)
语法的图标。 - 如果
MarkdownString
是受信任的,您还可以添加命令链接。语法:([test](command:vscode.newWindow))
测试
最终确定测试 API 的进程仍在继续。在此迭代中,我们重构了一些测试 API,以便更好地匹配扩展主机中其他 API 的样式。要跟踪最终确定过程并了解对 API 的更改,请关注 issue #122208。
我们预见的主要更改是“运行配置”的提供方式。要跟踪或权衡这些运行器 API 的进展情况,请关注 issue #127096。
最后,我们开始了对 测试覆盖率 的调查和初步实现,该测试覆盖率将在未来几周内在 UI 中显示出来。
内联建议
内联建议 API 允许扩展提供与建议小部件分离的内联建议。内联建议的呈现方式就像它已被接受一样,但颜色为灰色。用户可以使用 Tab
键在建议之间循环并接受它们。
vscode.languages.registerInlineCompletionItemProvider(
{ pattern: '**' },
{
provideInlineCompletionItems: async (document, position) => {
return [{ text: '< 2) {\n\treturn 1;\n\t}' }];
}
}
);
工程
ES2020
我们已经更新了 TypeScript 项目,以允许使用最新的 JavaScript API,例如 Promise.allSettled
或 String.replaceAll
。我们还输出更现代的 JavaScript ES2020,这稍微减小了我们主包的整体大小。
Electron 沙盒支持的进展
在这个里程碑中,我们继续使 VS Code 窗口为启用 Electron 的 沙盒 和 上下文隔离 功能做好准备。
具体而言
- 我们删除了用于加载打开 VS Code 窗口所需资源的 Node.js 依赖项。
- 我们向
iframe
元素添加了搜索,以获得更接近于已弃用的webview
组件的行为,从而允许我们在将来删除webview
。可以通过在settings.json
文件中设置"webview.experimental.useIframes": true
来启用此功能。
文档
数据科学教程和主题
数据科学教程和主题现在位于 https://vscode.js.cn 目录中的他们自己的部分下。您可以找到有关使用 Jupyter Notebooks、Python 交互式窗口,甚至分析泰坦尼克号乘客数据的 数据科学教程 的教程。
值得注意的修复
- 120956: iPad:无法在编辑器外部触发上下文菜单
- 122448: 如果扩展的依赖项被禁用,则自动禁用扩展
- 124169: 尝试不缩进活动的调试行
- 125144: 当线程不再停止时,焦点不会自动传递到另一个线程
- 125528: 当不再在其上停止时,取消选择断点视图中的断点
- 126211: 通过调试器启动的节点进程在退出 VS Code 时不会被终止
- 126702: macOS:命令行
code .
不工作 - 127716: 调试悬停:允许键盘搜索属性
感谢
最后但同样重要的是,非常感谢本月为 VS Code 做出贡献的以下人员
对问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- ArturoDent (@ArturoDent)
- Alexander (@usernamehw)
对 vscode
的贡献
- @Aaaaash (大表哥)
- 修复:areLanguageDiagnosticSettingsEqual 始终返回 true PR #125365
- 文件监视器排除 - 不再忽略对 node_modules 文件夹本身的更改。PR #125801
- @barbaravaldez (Barbara Valdez): 修改 treeDataChange 事件 PR #125214
- @conwnet (netcon): 修复:Web TypeScript 扩展无法找到定义 PR #125279
- @cpsauer (Christopher Sauer): 接受编辑器行高为字体大小的倍数 PR #125601
- @danielgary (Daniel Gary): 使用标题进行终端选择 PR #123478
- @datho7561 (David Thompson): 为 XML 和 XSL 语言添加
wordPattern
PR #127334 - @fannheyward (Heyward Fann): 修复:importStatementSuggestions 配置节 PR #124822
- @forivall (Emily Marigold Klassen): chore(typescript-language-features): 修复 deprecated 的拼写错误 PR #125693
- @hantatsang (Sang): 改进 DocumentFilter 文档 PR #125734
- @jeanp413 (Jean Pierre)
- 修复当窗格位于侧边时,终端拖放覆盖层水平移动而不是垂直移动的问题 PR #124985
- 修复在扩展编辑器中查看贡献选项卡时出错的问题 PR #125607
- 修复在编辑器区域拖放无效元素后出错的问题 PR #125943
- 修复将无效元素拖放到终端时出错的问题 PR #126553
- 修复富悬停焦点轮廓显示在状态栏悬停下方的问题 PR #127603
- @ksyx: fix(window.ts): 无响应的窗口弹出消息 [NFC] PR #126351
- @LiangchengJ (Liangcheng Juves): 更新 macOS Big Sur 的 “Code - OSS” 图标 PR #124416
- @markxoe (Mark Oude Elberink): 优化英语请执行的操作 PR #125154
- @mghalayini (Mohammad Ghalayini): 支持以根文件夹开头的链接 PR #125615
- @movermeyer (Michael Overmeyer): 为代码片段变量添加 camelCase 转换 PR #127257
- @nrayburn-tech (Nicholas Rayburn)
- 将悬停 CSS 添加到悬停元素 PR #123384
- 添加不显示终端链接悬停的选项 PR #124926
- @qchateau (Quentin Chateau): 修复重复的代码格式 PR #126183
- @richardtallent (Richard Tallent): 修复 renderWhitespace 默认值的文档 PR #125591
- @rickpmartin (Rick Martin): 添加 search.maxResults 设置 PR #126762
- @ryyppy (Patrick Ecker): 更新到最新的 seti-ui 并将 ReScript 添加到图标主题 PR #125659
- @stefanloerwald (Stefan Lörwald): 修复 #125303 PR #125304
- @suzmue (Suzy Mueller): 当未指定 threadId 时,设置顶层停止原因 PR #126852
- @turara: 修复 [终端:清除] 命令 PR #107454
- @Vtec234 (Wojciech Nawrocki)
- 添加 WASM MIME 类型 PR #125782
- 支持 Webview 本地资源的 Content-Length 和 Last-Modified PR #125994
对 vscode-extension-samples
的贡献
- @barbaravaldez (Barbara Valdez): 实现拖放控制器 PR #431
对 vscode-html-languageservice
的贡献
- @dummdidumm (Simon H): 添加一些缺失的鼠标和指针事件 PR #108
- @hardikshah197 (Hardik Sharma): 将次要文档类型更改为 “value” PR #107
对 vscode-js-debug
的贡献
- @rinselmann (Ryan Inselmann): 修复:尝试在 index.html 中设置断点时出错 PR #1029
对 vscode-languageserver-node
的贡献
- @dsherret (David Sherret): 确保在关闭连接之前发送退出通知 PR #776
对 language-server-protocol
的贡献
- @DanTup (Danny Tuppeny): 添加 source.fixAll 常量 PR #1308
对 monaco-editor
的贡献
- @anthony-c-martin (Anthony Martin): 添加 Bicep 示例 PR #2541
对 monaco-languages
的贡献
- @qwefgh90 (Changwon Choe): 改进在 restructuredText 中冻结页面的规则 PR #141
对 monaco-typescript
的贡献
- @spahnke (Sebastian Pahnke): 为所有标签正确构建标签文本 PR #81