2020 年 10 月 (版本 1.51)
1.51.1 更新:此更新解决了以下问题。
下载:Windows: x64 Arm64 | Mac: Intel | Linux: deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2020 年 10 月版。正如在 10 月迭代计划中宣布的那样,我们专注于整理 GitHub 问题和拉取请求,如我们的问题整理指南中所述。
我们还与 GitHub 的合作伙伴一起开发了 GitHub Codespaces,结果比最初预期的要复杂。为此,我们将继续在 11 月迭代的部分工作中进行清理。
在此清理里程碑期间,我们还解决了多项功能请求和社区拉取请求。继续阅读以了解新功能和设置。
工作台
更突出的固定标签页
现在,即使在不活动时,固定标签页也始终会显示其固定图标,以便更容易识别。如果编辑器既已固定又包含未保存的更改,则图标会反映两种状态。
扩展树使用自定义悬停
我们现在在扩展树视图中使用自定义悬停,而不是使用本机工具提示,这种悬停具有跨平台一致性,并且更符合整体用户体验。
安装扩展而不进行同步
现在,您可以在启用设置同步时安装扩展而不进行同步。
主题:GitHub Light
从资源管理器安装扩展
VS Code 现在支持从资源管理器安装扩展 VSIX 文件,方法是右键单击 VSIX 文件并选择“安装扩展 VSIX”上下文菜单项。
输入模糊命令
现在有一个新的内部 workbench.action.blur
命令可用,该命令可移除任何可聚焦输入的焦点。您可以在“键盘快捷方式首选项”中为此命令分配键盘快捷键。
集成终端
本地回显
传统上,在终端中进行修改需要将信息发送到终端进程,进行处理,然后返回到 VS Code 才能生效。当在与 SSH 服务器或 Codespace 的连接不良或距离较远的情况下工作时,这可能会很慢。
此版本向终端添加了“本地回显”模式,该模式尝试预测本地进行的修改和光标移动,并在 UI 中显示它们,而无需往返服务器。默认情况下,预测字符显示为“变暗”
您可以使用两个设置来配置此项
terminal.integrated.localEchoLatencyThreshold
配置检测到的延迟阈值(以毫秒为单位),本地回显将在该阈值激活。可以将其设置为0
以始终启用该功能,或设置为-1
以禁用该功能。默认为30
。terminal.integrated.localEchoStyle
配置本地字符的样式或颜色,默认为dim
。
IntelliSense
可调整大小的建议
在此里程碑中,我们对建议 UI 进行了多项改进。首先,它现在可以调整大小了。拖动侧面或角以调整控件大小。
主题:GitHub Light,字体:FiraCode
建议列表的大小将在会话之间保存和恢复。详细信息窗格的大小仅在每个会话中保存,因为该大小往往更具可变性。此外,editor.suggest.maxVisibleSuggestions
设置已过时。
建议的状态栏
建议控件现在还可以在窗口底部显示自己的状态栏。使用 editor.suggest.showStatusBar
设置启用它。它使切换详细信息更简单,并显示完成是否支持插入、替换或两者都支持。
主题:GitHub Light,字体:FiraCode
在上面的示例中,选择“插入”会导致 Math.floorceil
,选择“替换”会导致 Math.floor
。
新的 editor.suggest.insertMode
设置允许您配置您是喜欢插入还是替换。当建议同时支持两者时,您的偏好将是默认设置。
移动光标以选择建议
最后但并非最不重要的一点是,您现在可以在显示建议时移动光标。例如,您可以在单词末尾触发建议,向左移动以查看更多建议,然后使用替换来覆盖该单词。
主题:GitHub Light
Emmet
Emmet 中的自定义代码片段已回归。此外,代码片段现在会在保存代码片段文件或更新 emmet.extensionsPath
设置时自动刷新。
源代码管理
源代码管理输入框保存提交消息历史记录
这解决了导航 SCM 提交历史记录的功能请求。按 ↑ (Windows, Linux Up) 和 ↓ (Windows, Linux Down) 分别显示上一次和下一次提交。要直接移动到输入框的第一个和最后一个位置,请按住 Alt 键并结合相应的箭头键。
Git:子菜单中的标记命令
标记相关的 Git 命令已添加到 ... Git 菜单中。
Git:变基命令
已添加一个新的 Git:变基分支... 命令,该命令允许您使用 UI 对分支进行变基。
Git:递归克隆命令
使用 Git:克隆(递归)命令,您现在可以递归克隆 Git 存储库,包括其嵌套的 Git 子模块。
时间线:Emoji 短代码渲染
我们现在在时间线视图中渲染 emoji 短代码,例如 :smile:
。
语言
Markdown 智能选择
在 Markdown 文档中使用以下新命令展开和收缩选择
- 展开:⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)
- 收缩:⌃⇧⌘← (Windows, Linux Shift+Alt+Left)
选择适用于以下内容,并遵循传统的层次结构模式
- 标题
- 列表
- 块引用
- 围栏代码块
- Html 代码块
- 段落
JavaScript 和 TypeScript 的空花括号格式设置选项
新的 javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces
和 typescript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces
格式设置配置选项控制是否在空花括号之间插入空格。这些设置的默认值为 true。例如,对于 JavaScript
class Foo {
doFoo() { }
}
设置 "javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": false
并格式化代码会导致
class Foo {
doFoo() {} // Notice that the space has been removed
}
浏览器支持
下载文件夹 (Edge, Chrome)
利用新的 File System Access API,在浏览器中运行的 VS Code 现在可以提供从文件资源管理器下载文件夹的操作,以将所有文件和文件夹下载到磁盘。
注意:这需要最新版本的 Microsoft Edge 或 Google Chrome。
打开工作区通知
如果您打开一个在顶层包含 .code-workspace
文件的文件夹,您现在将看到一个通知,询问您是否打开它。这在桌面版 VS Code 中一直如此,现在在浏览器中也适用。
防止意外关闭
添加了一个新的设置 window.confirmBeforeClose
,用于在关闭或离开工作台之前显示确认对话框。
可能的值为
keyboardOnly
仅当您使用快捷键关闭时才会显示确认对话框(例如,⌘W (Windows, Linux Alt+F4))。(默认)always
:即使您通过鼠标手势关闭,也会始终显示确认对话框。never
:永远不会显示确认对话框。
注意:此设置可能不涵盖所有情况。浏览器可能仍然决定在不确认的情况下关闭选项卡或窗口。
扩展贡献
GitHub 拉取请求和问题
GitHub 拉取请求和问题扩展的工作仍在继续,该扩展允许您处理、创建和管理拉取请求和问题。
要了解所有新功能和更新,您可以查看扩展 0.21.0 版本的完整更改日志。
远程开发
远程开发扩展的工作仍在继续,这些扩展允许您使用容器、远程计算机或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.51 中的功能亮点包括
- 能够持久化/重新连接到终端会话。
- 改进的端口转发体验。
您可以在远程开发发行说明中了解新的扩展功能和错误修复。
预览功能
预览功能尚未准备好发布,但功能已足够使用。我们欢迎您在它们开发过程中提供早期反馈。
设置同步
设置同步现在同步扩展的全局状态。扩展将必须使用新引入的 setKeysForSync API 提供要同步的状态。
记住代理凭据
我们正在彻底修改登录对话框,该对话框在网络连接需要使用代理进行身份验证时显示。一个新的设置 window.enableExperimentalProxyLoginDialog: true
将启用这种新体验,我们计划在未来的版本中将其设为默认设置。
主题:GitHub Light
对话框将出现在 VS Code 窗口中,并提供一种记住凭据的方法,这样您就不必每次启动 VS Code 时都提供它们。凭据将存储在操作系统标准凭据存储区中(macOS 上的密钥链、Windows 上的 Windows 凭据管理器以及 Linux 上的 gnome 密钥环)。
我们仍然只在每个会话中显示此对话框一次,但将来可能会重新考虑此决定。如果您选择记住的凭据无效,您将再次看到该对话框出现。再次提供它们允许您更改它们。
请启用此选项,并通过我们的问题跟踪器告知我们是否有任何问题未按预期工作。
TypeScript 4.1 Beta 支持
VS Code 支持 TypeScript 4.1 Beta 和每夜构建版本。4.1 更新带来了一些新的 TypeScript 语言功能,例如对递归条件类型的支持,以及工具改进。一个重点领域是在 JSDoc 注释中添加对 @see
标记的初始支持。
要开始使用 TypeScript 4.1 每夜构建版本,只需安装 TypeScript Nightly 扩展。请分享反馈,并告知我们您在使用 TypeScript 4.1 时是否遇到任何错误。
扩展创作
更新的扩展示例
我们更新了一些扩展示例,以包含连接到我们颜色主题令牌的 VS Code 默认样式。这意味着常见元素(文本、按钮、输入)将可主题化,并与产品中的默认样式匹配。以下是包含此内容的扩展
树中的 Codicon 颜色
随着 ThemeIcon
颜色 API 的最终确定,扩展作者可以在自定义树视图中的 codicon 上使用主题颜色。
同步全局状态
现在,扩展可以通过提供键来同步其全局状态,当启用设置同步时,应同步这些键的值,方法是在 globalState
memento 中使用新引入的 setKeysForSync
API。
/**
* Set the keys whose values should be synchronized across devices when synchronizing user-data
* like configuration, extensions, and mementos.
*
* Note that this function defines the whole set of keys whose values are synchronized:
* - calling it with an empty array stops synchronization for this memento
* - calling it with a non-empty array replaces all keys whose values are synchronized
*
* For any given set of keys this function needs to be called only once but there is no harm in
* repeatedly calling it.
*
* @param keys The set of keys whose values are synced.
*/
setKeysForSync(keys: string[]): void;
注释线程回复按钮可见性
注释扩展现在可以使用新的属性 CommentThread#canReply
控制注释线程中回复按钮的可见性。当设置为 false
时,用户将不会在注释线程中看到回复按钮或注释框。
建议的扩展 API
每个里程碑都带有新的提议 API,扩展作者可以试用它们。与往常一样,我们希望收到您的反馈。这是您试用提议 API 必须做的事情
- 您必须使用 Insiders 版本,因为提议的 API 经常更改。
- 您必须在扩展的
package.json
文件中包含以下行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目的源位置。
您不能发布使用提议 API 的扩展。下一个版本中可能会有重大更改,我们绝不想破坏现有扩展。
折叠范围提供程序更改事件
折叠范围提供程序可以使用 onDidChangeFoldingRanges
事件向编辑器发出信号,表明需要更新折叠范围。
有关更多详细信息和提供反馈,请使用 issue #108929。
密码 API
作为身份验证提供程序持续工作的一部分,我们引入了用于存储和检索敏感信息的 API。在内部,这充当 VS Code 用于存储机密的 keytar 库的包装器。
/**
* Retrieve a password that was stored with key. Returns undefined if there
* is no password matching that key.
* @param key The key the password was stored under.
*/
export function getPassword(key: string): Thenable<string | undefined>;
/**
* Store a password under a given key.
* @param key The key to store the password under
* @param value The password
*/
export function setPassword(key: string, value: string): Thenable<void>;
/**
* Remove a password from storage.
* @param key The key the password was stored under.
*/
export function deletePassword(key: string): Thenable<void>;
/**
* Fires when a password is set or deleted.
*/
export const onDidChangePassword: Event<void>;
工程
使 VS Code 符合 Trusted Types
我们一直在努力使 VS Code 符合“Trusted Types”。目标是防止基于 DOM 的跨站点脚本漏洞。您可以在 web.dev Trusted Types 站点上了解有关 Trusted Types 的更多信息,并在 issue #103699 中关注我们的进展。
文档
入门
我们正在专注于使编辑器入门更容易的方法。我们在我们的网站上创建了一个新的“Learn to Code”着陆页,其中包含编码包和面向编码新手的新内容。我们还在网站 code.visualstudio.com/learn 上创建了新的学生友好型视频和资源。
新命令
快捷键 | 命令 | 命令 ID |
---|---|---|
聚焦左侧编辑器组(不环绕) | workbench.action.focusLeftGroupWithoutWrap |
|
聚焦右侧编辑器组(不环绕) | workbench.action.focusRightGroupWithoutWrap |
|
聚焦上方编辑器组(不环绕) | workbench.action.focusAboveGroupWithoutWrap |
|
聚焦下方编辑器组(不环绕) | workbench.action.focusBelowGroupWithoutWrap |
|
聚焦活动栏 | workbench.action.focusActivityBar |
值得注意的修复
- 43819:Windows:当删除包含正在使用文件的文件夹时,不显示错误消息
- 71315:删除文件后应保持行焦点
- 96522:用户输入变量在多根工作区中的启动配置中不起作用
- 100255:移动文件应直接加载模型及其之前的内容
- 108578:具有 onDebugDynamicConfigurations 的扩展在 v1.50 中启动时会急切激活
- 109088:为文件夹发送
vscode.workspace.onWillCreateFiles/onDidCreateFiles
事件 - 109226:调试悬停在展开/折叠时移动
感谢
最后但肯定并非最不重要的一点是,非常感谢以下本月为 VS Code 做出贡献的人们
对我们的问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Alexander (@usernamehw)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
对 vscode
的贡献
- Justin Steven (@justinsteven):(在 1.49.3 中修复)CVE-2020-16881 的修复程序可以被绕过 PR #107952
- Ashkan (@a5hk):关闭 #97890 PR #108779
- Daniel Huth (@Agreon):添加非环绕 EditorGroup 焦点操作 PR #108071
- Andrey Sinitsyn (@asn007):修复 (git):在 win32 上添加、还原文件或清理存储库时致命 [#108690] PR #108691
- Jordan Bayles (@baylesj):添加 Git:递归克隆选项 PR #109133
- Takanori Oishi (@bicstone)
- 应用语言包时,UI 项目顺序不正确 PR #109433
- Git:将标记添加到“...”菜单 PR #109282
- Borja Zarco (@bzarco):修复启动配置输入变量解析。PR #97440
- Dhairya Nadapara (@dhairyanadapara):在 FindInFile 接口中添加了保留大小写和排除设置 PR #107910
- Evan Krause (@evangrayk):当未展开的注释被隐藏时,不要聚焦编辑器 PR #97101
- Fons van der Plas (@fonsp):消息“您想暂存所有更改吗?” PR #109272
- John Murray (@gjsjohnmurray):修复 #108673 将 FileSystemProvider 错误消息放入 settings.json 创建失败通知中 PR #108694
- matvii (@hodovani):将
map
替换为forEach
PR #109217 - Jean Pierre (@jeanp413)
- 修复了有时在通知上单击鼠标中键会粘贴剪贴板的内容 PR #109349
- 修复了当配置目标不是用户时无法禁用文件自动保存的问题 PR #109278
- 在 ChangeEncodingAction 中将文件内容读取为流 PR #108052
- 修复了大纲视图元素溢出 PR #108038
- Kenny Smith (@kjs3):用于 MacOS 上向前删除的垃圾箱/删除快捷键 PR #108863
- Li Xueli (@mixj93):修复:删除未命名编辑器标签中的多余空格 PR #108039
- @Nafana:以 ^ 开头的 Markdown 引用链接不应可点击 PR #108015
- Pierre Papin (@pi-r-p):修复 webview 中的下载问题 PR #108603
- Rakib Fiha (@RakibFiha):更改了与 code.sh 相同的 shebang PR #109372
- Ryan Clarke (@ryanclarke):将新属性添加到 IConfigurationPropertySchema PR #108120
- Sebastian Andil (@selrond):修复 git 包中的
No Nerify
拼写错误 PR #108329 - Simon Siefke (@SimonSiefke):修复拼写错误:eventLister -> eventListener PR #108066
- Tomer Stav (@tomerstav)
- 将当前分支变基到另一个分支 PR #108913
- 将名为 newEditorGroup 的可选参数添加到 showOptions PR #107555
- 注意:最终未合并,但我们仍然感谢您的工作。
- Tony Xia (@tony-xia):Persisten -> Persistent PR #108389
- @turara:为“保留大小写”替换选项添加快捷键 PR #107597
- @vivekmthr:CodeLens 在鼠标抬起时激活 #107736 PR #108323
对 vscode-json-languageservice
的贡献
- Albert Nigmatzianov (@bogem):改进 README PR #78
对 vscode-html-languageservice
的贡献
- Jaime Oliveira (@IxquitilisSaid):更新 beautify-html wrap_attributes 文档 PR #92
- Nicholas Steven Darmawan (@steve1998):为 HTML 实体实现悬停 PR #89
对 vscode-css-languageservice
的贡献
对 vscode-eslint
的贡献
- Brandon Mills (@btmills):将 markdown 添加到 eslint.probe 默认文档 PR #925
- Brad Zacher (@bradzacher):通过指示这是一个仅工作区的扩展来支持远程开发 PR #1084
- Clément Tessier (@ctessier):修复 README.md 中的拼写错误 PR #1105
对 language-server-protocol
的贡献
- @KamasamaK
- Remy Suen (@rcjsuen):将斜杠更正为 textDocument/semanticTokens PR #1111
- Andreas Matthias (@AndreasMatthias):转义美元符号。PR #1124
对 vscode-emmet-helper
的贡献
- Yasar Siddiqui (@yasarsid):对于 Emmet 扩展 d: 应扩展为 “display: block” 而不是 “display: grid” PR #35
对 lsif-node
的贡献
- Noah Santschi-Cooney (@Strum355):lsif-util:通过在顶点额外信息部分中将 \" 替换为 " 来修复 #70 PR #112
对 debug-adapter-protocol
的贡献
- Jonah Graham (@jonahgraham):Bug #122:ProgressStartEvent 的 requestId 是一个整数 PR #123
- Mathias Fußenegger (@mfussenegger):将 nvim-dap 添加到工具页面 PR #140
- Suzy Mueller (@suzmue):更新 adapters.md 中的 Go 调试扩展信息 PR #142
- Ethan Reesor (@firelizzard18):添加 byebug-dap 和 ruby-dap PR #144
对 vscode-vsce
的贡献
- James George (@jamesgeorge007):修复:处理未知参数 PR #503
对 vscode-js-debug
的贡献
- hp8wvvvgnj6asjm7:在不受支持的操作系统上运行 Node.js 时,调试器不起作用 PR #791