2021年6月(版本1.58)
更新 1.58.1: 此更新解决了这些安全问题。
更新 1.58.2: 本次更新解决了这些问题。
下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
欢迎来到2021年6月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:
- 编辑器中的终端 - 在编辑器区域创建或移动终端。
- Workspace Trust - 快速自定义工作区信任设置,禁用受限模式横幅。
- 编辑器滚动条自定义 - 设置滚动条的可见性和宽度,点击导航行为。
- Markdown预览中的KaTeX支持 - 在Markdown预览中支持数学公式。
- 设置编辑器改进 - 支持多个复选框和枚举下拉菜单。
- 粘性调试环境选择 - 调试器会记住您之前选择的环境。
- Jupyter Interactive window - 直接在交互式窗口中运行Jupyter代码。
- Jupyter notebook debugging - 在VS Code中调试Jupyter notebook代码。
- 数据科学教程 - 学习关于Jupyter Notebooks、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
}
设置同步
现在有一个故障排除视图用于设置同步,其中包含所有日志和最后的同步状态。您可以通过运行命令Settings Sync: Show Synced Data并打开视图子菜单并勾选故障排除来访问此视图:
搜索最大结果设置
有一个新的设置,search.maxResults
,它允许你设置文本搜索结果的最大数量。默认值是20,000,比以前增加了10,000。当你加载大量搜索结果时,可能会看到一些缓慢的情况。
集成终端
编辑器区域中的终端
终端现在可以在编辑器区域创建或移动到编辑器区域,实现了一个多维网格布局,无论面板状态如何,该布局都会持久存在并保持可见。
要在编辑器区域使用终端,有几种选择:
- 通过在编辑器区域创建终端命令创建。
- 从标签列表中拖动一个终端到编辑器。
- 运行将终端移动到编辑器区域,并聚焦于终端。
- 在终端标签的上下文菜单中选择移动到编辑器区域。
新的terminal.integrated.defaultLocation
设置可以设置为editor
,以默认将新创建的终端定向到编辑器区域。
显式设置画布渲染器
在之前的版本中,我们默认启用了WebGL终端渲染器,并用更简单的terminal.integrated.gpuAcceleration
设置替换了terminal.integrated.rendererType
。不幸的是,一些机器在使用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 交互式窗口
我们已开始在笔记本生态系统之上提供内置的交互式窗口体验,并且Jupyter扩展已在设置jupyter.enableNativeInteractiveWindow
后采用了该功能。如果启用了该功能,当从Python文件运行代码或直接从命令面板启动时,Jupyter扩展将打开内置编辑器,而不是webview实现。内置编辑器与您自定义的键绑定/键映射或语言扩展一起工作,因为它与工作台深度集成。
Jupyter笔记本调试
我们一直在努力支持在Jupyter笔记本中进行调试,这样你就可以在笔记本单元格中设置断点,逐步执行单元格,并使用所有其他VS Code调试器功能。这目前是实验性的,但你可以通过设置"jupyter.experimental.debugging": true
,在你选择的内核中安装ipykernel的第6版,然后点击笔记本工具栏中的调试按钮来尝试。
远程仓库
在此次迭代中,我们主要专注于远程仓库扩展的错误修复和一些性能改进,以及与GitHub Pull Requests and Issues扩展的更好集成。此外,您现在可以从远程资源管理器中的远程仓库视图中移除远程仓库,并且更好地支持打开带有行范围的\blob
URL。
GitHub 拉取请求和问题
本次迭代的重点是修复GitHub Pull Requests and Issues扩展中的错误。查看更新日志以了解亮点。
远程开发
工作仍在继续在远程开发扩展上,这些扩展允许您使用容器、远程机器或Windows Subsystem for Linux (WSL) 作为全功能的开发环境。
1.58版本的功能亮点包括:
- 选项,仅为转发的端口打开一次浏览器。
devcontainer.json
支持缓存镜像。- Dev Containers 现在检查 "hostRequirements"。
您可以在远程开发发布说明中了解新扩展功能和错误修复。
实时预览
我们开发了一个Live Preview扩展,它为网页开发预览提供了一个本地服务器!🎉
它具有编辑器内的浏览器预览、实时预览刷新(在文件更改或保存时)、多根支持等功能!
该扩展还具有一个Live Preview
任务,它运行一个持久服务器,并允许您查看服务器流量及其相关文件。
要了解更多关于它能做什么的信息,你可以在Marketplace中找到详细信息,或者查看其仓库。
预览功能
TypeScript 4.4 支持
此版本包括对即将发布的TypeScript 4.4的初步支持。您可以在TypeScript博客上阅读更多关于TypeScript 4.4的新语言功能和改进的信息。
要开始使用 TypeScript 4.4 的夜间构建版本,请安装 TypeScript Nightly 扩展。
请分享您的反馈,并告诉我们您在使用TypeScript 4.4时是否遇到任何错误。
在窗口之间移动终端
现在可以通过在一个窗口中使用Terminal: Detach Session分离终端,然后在另一个窗口中使用Terminal: Attach to Session附加终端,从而在窗口之间移动终端。将来,这将有助于实现跨窗口的拖放功能!
扩展开发
详细的完成项标签
我们添加了新的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。
最后,我们开始调查并初步实施了测试覆盖率,这将在接下来的几周内在用户界面中展示。
内联建议
内联建议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://code.visualstudio.com目录中有自己的部分。你可以找到关于使用Jupyter Notebooks、Python交互窗口的教程,甚至还有一个数据科学教程,分析泰坦尼克号乘客数据。
显著的修复
- 120956: iPad: 无法在编辑器外触发上下文菜单
- 122448: 如果扩展的依赖项被禁用,则自动禁用扩展
- 124169: 尝试不要缩进当前调试行
- 125144: 当线程不再停止时,焦点不会自动传递给另一个线程
- 125528: 当不再停留在断点上时,在断点视图中取消选择断点
- 126211: 通过调试器启动的Node进程在退出VS Code时未被终止
- 126702: macOS: 命令行
code .
无法工作 - 127716: 调试悬停:允许键盘搜索属性
感谢您
最后但同样重要的是,向本月为VS Code做出贡献的以下人员表示衷心的感谢:
对我们问题跟踪的贡献:
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- ArturoDent (@ArturoDent)
- Alexander (@usernamehw)
对 vscode
的贡献:
- @Aaaaash (大表哥)
- fix: areLanguageDiagnosticSettingsEqual always return true PR #125365
- Files watcher exclude - do not ignore changes to the node_modules folder itself. 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): 修复已弃用的拼写 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): 为代码片段变量添加驼峰式转换 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