2020年10月(版本1.51)
更新 1.51.1: 此次更新解决了这些问题。
下载:Windows: x64 Arm64 | Mac: Intel | Linux: deb rpm tarball Arm snap
欢迎来到2020年10月发布的Visual Studio Code。正如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
。
智能感知
可调整大小的建议
在这个里程碑中,我们对建议的用户界面进行了几项改进。首先,它现在可以调整大小。拖动边或角来调整控件的大小。
主题: 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: Rebase 命令
新增了一个Git: Rebase branch...命令,允许你通过用户界面来变基一个分支。
Git: 递归克隆命令
使用Git: Clone (Recursive)命令,您现在可以递归地克隆Git仓库,包括其嵌套的Git子模块。
时间线:表情符号短代码渲染
我们现在在时间线视图中渲染表情符号短代码,例如 :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)
利用新的文件系统访问 API,运行在浏览器中的 VS Code 现在可以从文件资源管理器中提供文件夹的下载操作,将所有文件和文件夹下载到磁盘。
注意: 这需要最新版本的 Microsoft Edge 或 Google Chrome。
打开工作区通知
如果您打开一个包含顶级.code-workspace
文件的文件夹,您现在会看到一个通知,要求您打开它。这始终是桌面版VS Code的情况,现在在浏览器中也可以使用。
防止意外关闭
新增了一个设置 window.confirmBeforeClose
,用于在关闭或离开工作台之前显示确认对话框。
可能的值为:
keyboardOnly
确认仅在使用键绑定关闭时显示(例如,⌘W (Windows, Linux Alt+F4))。(默认)always
: 确认对话框将始终显示,即使您通过鼠标手势关闭。never
: 确认将永远不会显示。
注意: 此设置可能无法覆盖所有情况。浏览器仍可能在不确认的情况下关闭标签页或窗口。
对扩展的贡献
GitHub 拉取请求和问题
工作仍在继续在GitHub Pull Requests and Issues扩展上,该扩展允许您处理、创建和管理拉取请求和问题。
要了解所有新功能和更新,您可以查看扩展的完整0.21.0版本的变更日志。
远程开发
工作仍在继续在远程开发扩展上,这些扩展允许您使用容器、远程机器或Windows Subsystem for Linux (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 和 nightly 版本。4.1 更新带来了一些新的 TypeScript 语言特性,例如支持 递归条件类型,以及工具改进。一个重点领域是 添加了对 JSDoc 注释中 @see
标签的初步支持。
要开始使用 TypeScript 4.1 的夜间构建版本,只需安装 TypeScript Nightly 扩展。请分享反馈,并告诉我们您在使用 TypeScript 4.1 时是否遇到任何错误。
扩展开发
更新的扩展示例
我们已经更新了一些我们的扩展示例,以包含连接到我们颜色主题令牌的VS Code默认样式。这意味着常见元素(文本、按钮、输入)将可主题化,并与产品中的默认样式匹配。以下是包含此功能的扩展:
树中的Codicon颜色
随着ThemeIcon
颜色 API的最终确定,扩展作者可以在自定义树视图中使用主题颜色于codicons上。
同步全局状态
扩展现在可以通过提供键来同步它们的全局状态,当启用设置同步时,这些键的值应该被同步,使用在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;
评论线程回复按钮可见性
Comment 扩展现在可以通过一个新的属性 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符合“可信类型”标准。目标是防止基于DOM的跨站脚本漏洞。您可以在web.dev的可信类型网站上了解更多关于可信类型的信息,并在问题#103699中关注我们的进展。
文档
入门指南
我们正在专注于使编辑器更容易上手的方法。我们在我们的网站上创建了一个新的“学习编程”登陆页面,其中包含针对编程新手的编码包和新内容。我们还在code.visualstudio.com/learn上创建了新的适合学生的视频和资源。
新命令
Key | Command | Command ID |
---|---|---|
Focus Left Editor Group (do not wrap around) | workbench.action.focusLeftGroupWithoutWrap |
|
Focus Right Editor Group (do not wrap around) | workbench.action.focusRightGroupWithoutWrap |
|
Focus Above Editor Group (do not wrap around) | workbench.action.focusAboveGroupWithoutWrap |
|
Focus Below Editor Group (do not wrap around) | workbench.action.focusBelowGroupWithoutWrap |
|
Focus Activity Bar | workbench.action.focusActivityBar |
显著的修复
- 43819: Windows: 当删除一个包含正在使用的文件的文件夹时,没有显示错误信息
- 71315: 删除文件后应保持行焦点
- 96522: 在多根工作区中,用户输入变量不适用于启动配置
- 100255: 移动文件时应直接加载其之前内容的模型
- 108578: 在v1.50中,具有onDebugDynamicConfigurations的扩展在启动时会被急切激活
- 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): 添加非换行编辑器组焦点操作 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
- 李学礼 (@mixj93): 修复: 在无标题编辑器标签中移除多余的空格 PR #108039
- @Nafana: 以 ^ 开头的 Markdown 参考链接不应可点击 PR #108015
- Pierre Papin (@pi-r-p): 修复webviews中的下载问题 PR #108603
- Rakib Fiha (@RakibFiha): 将shebang更改为与code.sh相同 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
- 向showOptions添加一个名为newEditorGroup的可选参数 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): 对于d的Emmet扩展:应该扩展为"display: block"而不是"display: grid" PR #35
对lsif-node
的贡献:
- Noah Santschi-Cooney (@Strum355): lsif-util: 通过将顶点额外信息部分中的 \" 替换为 " 来修复 #70 PR #112
对debug-adapter-protocol
的贡献:
- Jonah Graham (@jonahgraham): 错误 #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