2021 年 6 月(版本 1.58)
更新 1.58.1:此更新解决了这些安全问题。
更新 1.58.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 英特尔 芯片 | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2021 年 6 月发布版本。此版本包含多项更新,希望您会喜欢,其中一些主要亮点包括:
- 编辑器中的终端 - 在编辑器区域创建或移动终端。
- 工作区信任 - 快速自定义工作区信任设置,禁用受限模式横幅。
- 编辑器滚动条自定义 - 设置滚动条可见性和宽度,点击导航行为。
- Markdown 预览 KaTeX 支持 - Markdown 预览中支持数学公式。
- 设置编辑器改进 - 支持多个复选框和枚举下拉菜单。
- 记住每个文件的调试环境选择 - 调试器会记住您之前的环境选择。
- Jupyter 交互式窗口 - 在交互式窗口中直接运行 Jupyter 代码。
- Jupyter Notebook 调试 - 在 VS Code 中调试 Jupyter Notebook 代码。
- 数据科学教程 - 了解 Jupyter Notebook、PyTorch 等。
如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新。
太平洋时间 7 月 13 日星期二上午 8 点(伦敦时间下午 4 点),加入我们观看 VS Code 团队直播,了解此版本的新功能演示,并向我们实时提问。
内测版:想尽快试用新功能?您可以下载每晚的内测版构建版本,并在最新更新发布后立即试用。
工作台
工作区信任
工作区信任功能是 1.57 版本中引入的一项重大更改,我们认为开发人员能够安全地浏览代码至关重要,即使他们不熟悉代码源。在这个里程碑版本中,我们一直在收集客户反馈,并专注于修复问题和采纳建议。
为了帮助用户发现可以自定义工作区信任的用户设置,工作区信任编辑器标题中新增了一个配置您的设置操作。此操作将打开已按 @tag:workspaceTrust
筛选的设置编辑器。
说到设置,新增了一个设置来配置何时显示指示当前窗口处于受限模式的横幅。与 security.workspace.trust.startupPrompt
设置类似,新的 security.workspace.trust.banner
允许您在熟悉工作区信任功能后禁用该横幅,从而不再需要提醒您处于受限模式。默认情况下,此横幅每个工作区显示一次,直到被关闭 ("untilDismissed"
)。显示受限模式横幅的其他选项包括 "always"
(始终显示)和 "never"
(从不显示)。
您可以在最近的工作区信任博客文章中了解更多关于工作区信任的原理和开发信息。该文章解释了受限模式如何帮助您防止意外和潜在恶意代码执行,并提供了设置开发机器的技巧,以便您可以快速安全地工作。
设置编辑器
此迭代版本为设置编辑器增加了对具有固定数量布尔属性的设置对象的支持,通过将这些属性渲染为复选框列表。
此迭代版本还增加了对枚举数组的额外支持,在编辑模式下使用下拉菜单而不是纯文本框。
瞬态工作区
现在有了一种新型工作区,称为“瞬态”工作区,其行为与常规工作区不同,具体表现为:
- 重启或重新加载 VS Code 不会尝试再次打开该工作区。
- 设置为瞬态的工作区不会出现在最近打开的工作区列表中。
通过在工作区 .code-workspace
文件中添加 transient
属性并设置为 true
来指定瞬态工作区
{
"folders": [],
"transient": true
}
设置同步
设置同步现在有一个故障排除视图,其中包含所有日志和上次同步状态。您可以通过运行命令设置同步:显示已同步数据并打开视图子菜单并勾选故障排除来访问此视图
主题:GitHub 浅色主题
搜索最大结果数设置
新增了一个设置 search.maxResults
,允许您设置文本搜索结果的最大数量。默认值为 20,000,高于之前的 10,000。当加载大量搜索结果时,您可能会遇到一些速度减慢的情况。
集成终端
编辑器区域中的终端
现在可以在编辑器区域中创建或移动终端,从而实现一种多维网格布局,该布局无论面板状态如何,都能持久存在并保持可见。
要在编辑器区域中使用终端,有以下几种选择:
- 通过在编辑器区域创建终端命令创建。
- 将终端从标签列表拖放到编辑器中。
- 在终端获得焦点时运行将终端移动到编辑器区域命令。
- 在终端标签上下文菜单中选择移入编辑器区域。
新的 terminal.integrated.defaultLocation
设置可以设置为 editor
,以默认将新创建的终端定向到编辑器区域。
显式设置 Canvas 渲染器
在之前的迭代中,我们默认启用了 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 文件和 Notebook 中的 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
采纳了此功能。如果此功能启用,Jupyter 扩展在运行 Python 文件中的代码或直接从命令面板启动时,将打开内置编辑器而不是 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 和 Issues
此迭代中,GitHub Pull Requests and Issues 扩展的重点是修复错误。请查看更新日志以了解亮点。
远程开发
远程开发扩展的开发工作仍在继续,它允许您使用容器、远程机器或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.58 版的功能亮点包括:
- 转发端口时仅打开一次浏览器的选项。
devcontainer.json
支持缓存镜像。- 开发容器现在检查“hostRequirements”。
您可以在远程开发发布说明中了解有关新扩展功能和错误修复的信息。
实时预览
我们开发了一个 实时预览 扩展,它托管一个本地服务器用于 Web 开发预览!🎉
它具有编辑器内浏览器预览、实时预览刷新(文件更改或保存时)、多根目录支持等功能!
该扩展还有一个 Live Preview
任务,它运行一个持久服务器,并允许您查看服务器流量及其关联文件。
预览功能
TypeScript 4.4 支持
此版本包含对即将发布的 TypeScript 4.4 的初步支持。您可以在TypeScript 博客上阅读更多关于 TypeScript 4.4 中新的语言功能和改进的信息。
要开始使用 TypeScript 4.4 每晚构建版本,请安装 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 的更改,请关注问题 #122208。
我们预计的主要变化在于“运行配置”的提供方式。要跟踪或参与这些运行程序 API 的进展,请关注问题 #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 Notebook、Python 交互式窗口的教程,甚至还有一个分析泰坦尼克号乘客数据的数据科学教程。
重要修复
- 120956:iPad:无法在编辑器外部触发上下文菜单
- 122448:如果扩展的依赖项被禁用,则自动禁用该扩展
- 124169:尝试不缩进活动调试行
- 125144:当线程不再停止时,焦点不会自动传递给另一个线程
- 125528:当不再停在该断点时,在断点视图中取消选择该断点
- 126211:退出 VS Code 时,通过调试器启动的 Node 进程不会被杀死
- 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:修复(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):为 Snippet 变量添加 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
的贡献
对 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