2020 年 11 月(1.52 版)
1.52.1 更新:此更新解决了这些 问题。
下载:Windows: x64 Arm64 | Mac: Intel | Linux: deb rpm tarball Arm snap
欢迎使用 2020 年 11 月版的 Visual Studio Code。正如 11 月迭代计划 中宣布的那样,我们继续将重点放在两个星期的时间内整理 GitHub 问题和拉取请求,如我们的 问题整理指南 中所述。在我们所有的 VS Code 存储库中,我们关闭了(分类或修复)5242 个问题,这甚至比我们在 2019 年 10 月 的最后一次整理迭代中关闭的 4622 个问题还要多。在我们关闭问题的同时,您创建了 2937 个新问题。主要 vscode 存储库 现在有 2146 个开放的功能请求和 884 个开放的错误。此外,我们还关闭了 144 个拉取请求。
和每年一样,我们使用了 实时跟踪器(来自 Benjamin Lannon)来跟踪我们的进度。
在专注于整理工作之后,我们还解决了几个功能请求和社区 拉取请求。这导致了许多新功能和设置,其中一些关键亮点包括
- 差异编辑器中的自动换行 - 内联和并排视图现在都支持自动换行。
- 新的扩展二分查找功能 - 排查哪些扩展会导致 VS Code 出现问题。
- 键盘快捷键编辑器改进 - 从命令面板创建键盘绑定。
- 在资源管理器中撤消文件操作 - 在资源管理器中撤消或重做文件操作。
- 新的 Git 命令和设置 - 使用新功能优化您的版本控制体验。
- 预览编辑器改进 - 完全关闭预览编辑器,并尝试新的交互模型。
- 空格的粘性制表符停靠点 - 当使用空格缩进时,体验得到改善。
- 改进的基于单词的建议 - 从其他打开的文件中显示基于单词的建议。
- 终端配置支持 - 从终端下拉菜单修改终端设置。
- 新的远程开发资源 - 查看新的视频和学习模块。
工作台
预览编辑器改进
我们根据用户反馈对处理 预览编辑器 的方式进行了一些更新。
workbench.editor.enablePreviewFromQuickOpen
设置现在默认情况下处于禁用状态,因此从快速打开打开的编辑器将不再以预览模式显示。
当您启动代码导航(例如,使用转到定义)时,您启动的编辑器将退出预览模式并保持打开状态,而新编辑器将处于预览模式,直到您进一步导航。
我们更改了我们所有自定义的树(例如,在扩展或 Git 视图中使用的树)以更一致地像其他内置树(如文件资源管理器)一样工作。这意味着以下交互现在适用于所有这些树
- 双击或鼠标中键单击以在非预览模式下打开。
- Enter 以在非预览模式下打开(Space 以在预览模式下打开)。
Alt+Click
以在活动编辑器旁边打开一个编辑器。
注意:如果您是使用我们的自定义树 API 的扩展作者,您也会从这项更改中获益。请确保对TreeItem.command
使用vscode.open
或vscode.diff
命令以获得新的预览模式行为。
编辑器溢出菜单中的一个新菜单项保持编辑器打开允许您快速完全关闭预览编辑器。
恢复以前的会话窗口
现有window.restoreWindows
设置的新值preserve
允许您强制在关闭 VS Code 后重新打开您之前打开的每个窗口,即使 VS Code 被明确要求打开特定文件夹或文件。一个常见的示例是双击平台文件资源管理器中的文件以在 VS Code 中打开它,或使用终端打开特定文件或文件夹。如果没有window.restoreWindows: preserve
设置,VS Code 只会打开指定的文件或文件夹,而不会恢复任何其他窗口。
禁用拖放时的编辑器组拆分
一个新的设置workbench.editor.splitOnDragAndDrop
在使用拖放编辑器时,可以防止编辑器组拆分。在拖放操作期间,也可以通过按住Shift 键(macOS)或Alt 键(Windows、Linux)来有条件地切换此功能。
在资源管理器中撤消文件操作
文件资源管理器现在支持对所有文件操作的撤消和重做:删除、重命名、复制、移动、新建文件和新建文件夹。请确保焦点在文件资源管理器中,并触发撤消或重做命令,您的最后一次文件操作将分别被撤消或重做。请记住,我们在编辑器和文件资源管理器中分别有不同的撤消堆栈,我们根据焦点选择要撤消哪个堆栈。
资源管理器中的长时间运行操作进度
我们现在在文件资源管理器和状态栏中显示长时间运行的文件操作(超过 500 毫秒)的进度。还支持初始取消长时间运行的操作。这在复制大型文件夹或从远程位置下载资源时应该很有帮助。
打开的编辑器排序
有一个新的设置explorer.openEditors.sortOrder
用于控制打开的编辑器列表中的排序顺序。
值是
editorOrder
- 编辑器按与编辑器选项卡显示顺序相同的顺序列出(默认)。alphabetical
- 编辑器按字母顺序列出,每个编辑器组内都按字母顺序列出。
alphabetical
排序只对打开的编辑器视图有效 - 它不会以任何方式“移动选项卡”。
当您打开很多文件并且您想要匹配关联的文件(例如,hello.component.js 和 hello.component.html)时,这可能会有所帮助。
无障碍进度控制
工作台进度显示已变得更加无障碍。VS Code 设置了适当的 ARIA 角色,以便屏幕阅读器可以报告 VS Code 中所有长时间运行的操作的进度。大多数屏幕阅读器默认情况下只在进度持续超过 10 秒时宣布进度。
源代码管理更改显示其父文件夹路径
从源代码管理视图打开的差异编辑器现在将显示其文件路径(当选项卡被禁用时)。以前,只有文件名会显示,但现在,如果之前和之后的文件位于同一个文件夹中,则会显示父文件夹。
新的代理登录对话框默认情况下已启用
我们新的代理登录对话框现在默认情况下已启用。您可以阅读我们的 上一个版本说明 以了解更多详细信息。设置window.enableExperimentalProxyLoginDialog
可用于启用旧对话框,但我们将在不久的将来删除此支持。如果您发现新登录对话框存在问题,请通过提交 问题 告知我们。
改进的终端环境处理(Linux、macOS)
当您第一次通过停靠栏或启动器(而不是终端)在 Linux 或 macOS 上启动 VS Code 时,VS Code 会启动一个后台进程以解析您的 shell 环境(如.bashrc
或.zshrc
中定义或更改的)。检测到的所有环境变量随后将被 VS Code 使用,因此从终端或停靠栏/启动器启动没有任何区别,这在调试或执行任务时很重要。
不幸的是,VS Code 在此后台进程执行完毕之前不会打开。为了不长时间阻塞启动,VS Code 将在 10 秒后开始打开。在这种情况下,VS Code 现在会通知您它无法解析 shell 环境,并提供一个链接以了解详细信息。
同样,VS Code 现在会在三秒钟后显示一个警告,以表明 VS Code 启动被阻塞,无法解析您的 shell 环境。
我们正在积极寻求改变我们的策略,以便在后台解析 shell 环境的同时不阻止 VS Code 启动,但这只能在未来的里程碑中实现。
此领域中其他值得注意的更改包括
- 您现在可以从终端定义和更改环境变量,然后再启动 VS Code 的第二个窗口,这些变量将正确覆盖第一次启动的变量,从而有效地允许每个窗口的环境变量(例如,这使您能够使用
nvm
等工具在每个窗口中更改 Node.js 版本,然后再启动)。 - 在启动 VS Code 的第二个窗口之前从终端设置的环境变量现在即使您在第二个窗口中切换文件夹也会被保留。
改进的工作台溢出
无论何时没有足够的空间将所有视图都放在工作台中,VS Code 现在将显示滚动条以平移内容,让您访问所有内容。这适用于工作台中的几个区域,例如侧边栏、编辑器网格等等。
窗格悬停边框颜色
您现在可以为工作台中的窗格(sash.hoverBorder
)自定义悬停边框颜色。
树:展开模式
一个新的workbench.tree.expandMode
设置允许您控制树中文件夹如何展开:使用单次单击或双击。
macOS Big Sur 更新
由于 Electron 9 的问题,当您选择 **重启以更新** 时,VS Code 不会自动重启,而只会退出。在下一个包含 Electron 11 的 VS Code 版本发布之前,发生这种情况时您必须手动重新启动 VS Code。在 问题 #109728 中了解更多信息。
源代码管理
保留源代码管理视图状态
源代码管理视图状态现在跨会话保留。即使在退出和重新启动 VS Code 后,折叠的树节点也会保持折叠状态。
源代码管理边栏操作
新的 scm.diffDecorationsGutterAction
设置允许您控制在您选择编辑器左侧的源代码管理边栏装饰时会发生什么。可能的值是
diff
- 在点击时打开内联差异预览视图(默认值)。none
- 禁用任何操作。
Git:新命令
命令面板中添加了一些新的 Git 命令
- Git:Cherry Pick... - 将特定提交 cherry pick 到您的分支。
- Git:重命名 - 对活动文件执行 git 重命名。
- Git:推送标签 - 将所有本地标签推送到远程仓库。
- Git:检出到(分离)... - 以分离模式执行检出操作。
Git:新设置
此外,还添加了新的 Git 设置
git.pruneOnFetch
- 在获取远程引用时使 VS Code 运行git fetch --prune
。git.ignoreSubmodules
- 您现在可以确保 VS Code 忽略子模块仓库中的更改,这在大型单仓库中很有用。git.openAfterClone
- 控制克隆 Git 仓库后是否以及如何打开文件夹:在当前窗口、新窗口、没有打开文件夹时以及提示用户。git.useCommitInputAsStashMessage
- 启用 VS Code 在运行 **Git:Stash** 时使用源代码管理输入框中的提交消息作为 stash 消息。git.followTagsWhenSync
- 在运行 **Git:Sync** 时跟踪标签。git.checkoutType
- 控制在运行 **Git:Checkout...** 命令时显示哪些引用以及显示顺序。
Git:在 stash 之前提示保存文件
VS Code 现在会在您尝试 stash 更改时提示您保存未保存的文件。
Git:改进的删除文件合并冲突差异
删除文件合并冲突现在具有改进的差异体验,显示了与删除相反分支上的文件中的实际更改。
Git:在添加远程仓库后获取
VS Code 现在会在您添加远程仓库后立即运行 git fetch
,从该远程仓库获取所有引用。
Git:检出分离模式
现在可以从 VS Code 以分离模式检出引用。
Git:在错误时显示命令输出
当 Git 命令抛出错误时,您现在可以使用新的 **显示命令输出** 选项查看完整的错误消息。
Git:git.api.getRemoteSources 命令的新选项
git.api.getRemoteSources
Git API 命令选项现在支持一个可选的 branch?: boolean
属性,这将使 Git 提示用户从远程来源选择一个分支,前提是远程来源提供程序支持。
此外,该命令现在支持 providerName?: string
选项,允许调用者绕过用户对远程来源的选择,直接使用特定提供程序。
调试
断点视图:异常断点的条件
VS Code 现在支持使用 **编辑条件** 上下文菜单操作从断点视图编辑异常断点的条件。
目前,只有 Mock Debug 扩展支持(假)异常断点条件,但不久其他调试扩展也将支持,例如 JavaScript 调试器。
异常区域可访问性
编辑器中的异常信息区域已变得更加易于访问。在调试时,一旦遇到异常,VS Code 将自动将焦点移至异常区域,这将使屏幕阅读器报告异常详细信息和堆栈帧。
现在也可以使用 Escape 键或异常区域右上角的 **X** 按钮关闭异常区域。
UI 改进
概述标尺中显示的调试行
现在在编辑器右侧的概述标尺中显示当前调试的行。对于此装饰,我们使用已经存在的 editor.stackFrameHighlightBackground
颜色。除此之外,VS Code 使用 editor.focusedStackFrameHighlightBackground
颜色在概述标尺中显示当前聚焦的调试行(聚焦的调试行是非顶层堆栈帧位置,这些位置是在 **调用堆栈视图** 中手动选择的)。
自动调试配置改进
以前,我们引入了这样一项功能,使调试扩展能够分析当前项目并自动提供调试配置。这些调试配置是动态创建的,因此它们不会显示在 launch.json
配置文件中。在本里程碑中,我们还保留了跨 VS Code 重启(和重新加载)的最近使用的自动调试配置,以使整个体验更加流畅。如果自动调试配置在重启后不再有效,VS Code 会在您启动调试时要求您从同一提供程序中选择新的自动配置。
调试悬停:底部显示的帮助文本/提示,用于切换到普通悬停
调试悬停底部现在显示帮助文本,以便在调试时使 Alt 切换到编辑器语言悬停更易于发现。提醒一下,当您进行调试时,调试悬停优先于语言悬停,这使得无法看到语言悬停。您可以通过按住 Alt 修饰键从调试悬停切换回语言悬停。只要按下 Alt,就会显示语言悬停而不是调试悬停。这使得在调试时更容易阅读像 Javadoc 描述这样的悬停。
调试控制台:折叠相同行
调试控制台现在折叠相同的输出并显示出现次数。此功能使您更容易掌握重复的程序输出。
launch.json 和 tasks.json 的新变量
引入了以下新变量
${fileWorkspaceFolder}
- 解析为在活动 VS Code 编辑器中打开的文件的工作区文件夹路径。${fileDirnameBasename}
- 解析为在活动 VS Code 编辑器中打开的文件所在的文件夹的名称。${pathSeparator}
- 解析为操作系统用于分隔文件路径中组件的字符。
serverReadyAction:按名称启动其他调试配置
serverReadyAction 历来可以通过匹配 URL 来启动浏览器或 Chrome 调试。此版本添加了一个新的选项,可以按名称启动另一个任意配置。例如,在您的 launch.json
中,您可以指定
"serverReadyAction": {
"action": "startDebugging",
"pattern": "listening on port ([0-9]+)",
"name": "Launch Browser"
}
这允许您在标准 Chrome 调试配置中传递其他选项,并使用 serverReadyAction
使用其他调试器。
临时禁用自动附加
现在可以通过状态栏中的 **自动附加** 项目或通过 **调试:切换自动附加** 命令暂时禁用自动附加。以这种方式禁用自动附加只适用于当前窗口,不需要重新启动您的终端。它可以以相同的方式重新启用。
JavaScript 调试器
可以在调试器的 变更日志 中找到完整的变化列表。
断点诊断工具
有一个新工具旨在帮助您解决导致无法调试或断点无法绑定构建或配置问题。要使用它,请在调试会话运行时运行 **调试:为当前会话创建诊断信息** 命令。在更高版本的 VS Code 中,将在适当的时候自动显示该诊断工具的提示。
默认可执行文件位置设置
有一个用户设置 debug.javascript.defaultRuntimeExecutable
,它允许您指定 Node.js 或 Chrome 二进制文件的默认位置。例如,{ "pwa-chrome": "dev" }
将在您使用 Chrome 类型配置进行调试时使用 Chrome 的 "dev" 版本。
请注意,要使用此新选项,您需要确保您的启动配置是 pwa-node
而不是 node
,或者 pwa-chrome
而不是 Chrome。
任务
npm
内置 npm 扩展的设置 npm.packageManager
具有一个新的默认值:auto
。auto
值将导致根据 .lock
文件以及工作区中用于安装依赖项的包管理器自动检测包管理器。当检测到多个 .lock
文件时,仍会选择一个包管理器,并会发出警告,表明存在冲突。
删除最近的任务
任务快速选择列表一直以来在顶部都有一个 **最近的任务** 部分。由于这是一个有价值的位置,您现在可以通过使用右侧的 **删除最近使用过的任务** 按钮从快速选择列表中删除它们来更好地管理您的最近任务。
扩展
在本里程碑中,我们对扩展视图和扩展详细信息页面进行了许多改进。
扩展视图现在会自动刷新。例如,在安装扩展后,扩展会立即显示在 **扩展:已安装** 列表中。您还可以使用标题栏中的刷新按钮手动刷新视图。
主题:GitHub Light
扩展的详细信息页面现在显示一个上下文菜单,其中包含扩展的所有操作,就像扩展视图一样。
主题:GitHub Light
扩展的详细信息页面中的 **功能贡献** 选项卡现在显示扩展的 激活事件。
主题:GitHub Light
您现在可以一起禁用扩展及其依赖项。当您尝试禁用具有依赖项的扩展时,会出现一个带有 **禁用全部** 操作的通知。
主题:GitHub Light
您可以使用扩展视图中扩展上下文菜单中提供的 **添加到工作区推荐** 或 **从工作区推荐中删除** 操作将扩展添加到工作区推荐中或从工作区推荐中删除。
主题:GitHub Light
扩展推荐通知现在在启用设置同步时显示安装下拉操作,就像扩展视图一样。
我们通过弃用 extensions.showRecommendationsOnlyOnDemand
设置简化了配置扩展推荐。您现在可以使用 extensions.ignoreRecommendations
设置来控制扩展推荐通知,并使用扩展视图的可见性操作来默认隐藏推荐。
故障排除:扩展二分查找
VS Code 的真正强大之处在于它的扩展:主题扩展添加了漂亮的颜色和图标,语言扩展提供了智能感知并启用了代码导航,调试扩展使您能够深入了解错误。有时并不明显问题是由扩展引起的,如果是,是由哪个扩展引起的。直到今天,您需要禁用所有扩展,然后逐个重新启用扩展以找到有问题的扩展。此过程现在通过一项名为 **扩展二分查找** 的新功能变得容易。它使用二分查找算法快速识别导致问题的扩展。本质上,它会禁用一半的扩展并要求您检查您遇到的问题。如果问题消失了,那么有问题的扩展一定是在已禁用扩展列表中,而不是在当前已启用扩展列表中。此过程会重复,直到只剩下一个扩展。
您可以通过命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的**帮助:开始扩展二分查找**命令开始扩展二分查找。然后它将引导您完成反复禁用和重新启用扩展的过程。每次重新加载后,系统会提示您确认问题是否仍然存在。
扩展二分查找将反复询问您检查问题是否正在重现。您可以随时通过**停止二分查找**中止,如果您取消了二分查找通知,则可以通过**帮助:继续扩展二分查找**命令继续。
扩展二分查找过程完成后,系统会要求您针对该扩展提交问题。您也可以从此处保持扩展禁用状态。
键盘快捷键编辑器
我们在本里程碑中对键盘快捷键编辑器添加了一些改进。
您现在可以通过命令面板右边的**配置键盘快捷键**齿轮按钮为命令配置键盘快捷键。
主题:GitHub Light
您可以在键盘快捷键编辑器中为一个命令添加多个键盘快捷键。
主题:GitHub Light
您现在还可以从搜索输入中按特定的键盘快捷键编辑器列进行过滤
@command:commandId
- 按命令 ID 过滤。例如,@command:workbench.action.showCommands
。@keybinding:keybinding
- 按键盘快捷键过滤。例如,@keybinding:f1
。@source:user|default|extension
- 按来源过滤。
您可以使用向上和向下箭头在键盘快捷键编辑器中导航搜索历史记录。
IntelliSense
来自其他文档的基于单词的建议
VS Code 支持简单的基于单词的建议。当语言服务不可用或语言服务无法计算结果(例如在注释中键入时)时,它们很有用。通过此版本,VS Code 现在可以配置为从其他打开的文件中建议单词。将editor.wordBasedSuggestionsMode
设置与allDocuments
一起使用以从所有打开的文件中建议单词,将matchingDocuments
与使用currentDocument
一起使用以从相同语言的打开文件中建议单词(默认),并使用currentDocument
仅从当前文件中建议单词。
隐藏内联详细信息
VS Code 中的建议包含在建议旁边单独的弹出窗口中显示的详细信息。详细信息视图可以关闭,然后将显示详细信息的预览,与建议内联。在建议中内联显示详细信息可能会占用太多空间,因此现在可以通过一个新的布尔设置editor.suggest.showInlineDetails
来禁用它。
TypeScript 建议显示路径
TypeScript 可以提供完成,这些完成还会添加 import 语句。但是,当存在多个具有相同名称的符号时,很难选择正确的完成。此版本简化了此过程,因为自动导入完成的路径将与标签一起显示。
自定义 CodeLens
您现在可以配置 CodeLens 项的字体系列和大小。
在上面的屏幕截图中,字体和大小是使用这两个设置自定义的
"editor.codeLensFontFamily": "Comic Sans MS",
"editor.codeLensFontSize": 12,
编辑器
使用空格缩进时的粘性制表符
如果您更喜欢使用空格缩进代码,则有一个名为editor.stickyTabStops
的新设置,它使 VS Code 在处理前导空格中的光标移动时类似于制表符。
删除单词命令
现有的删除单词操作将从当前光标位置删除到单词的开头(例如,Windows/Linux 上的Ctrl+Backspace)或到单词的结尾(Windows/Linux 上的Ctrl+Delete)。现在有一个新的命令,名为**删除单词**,它将删除光标下的整个单词。
差异编辑器中的自动换行
差异编辑器的并排视图和内联视图现在都支持自动换行。通常,差异编辑器将尊重与自动换行相关的编辑器设置。对于 Markdown 文件(默认情况下自动换行),差异编辑器也将对其进行自动换行
如果您希望差异编辑器从不换行或始终换行,则可以使用新的diffEditor.wordWrap
设置并将其配置为"on"
或"off"
(默认值为"inherit"
,这意味着差异编辑器继承编辑器换行设置)。
代码片段
隐藏扩展片段
扩展贡献的片段现在可以从 IntelliSense 中隐藏。当您运行**插入片段**时,此功能可在插入片段选择器中使用。找到要隐藏的扩展片段,然后选择右侧的眼形图标。
隐藏的片段不会显示在 IntelliSense 中,但仍可以通过**插入片段**使用。最后,使用设置同步时,隐藏的片段首选项将在您的设备之间同步。
没有前缀的片段
编写片段时,您现在可以省略 prefix 属性。没有前缀的片段不会显示在 IntelliSense 中,但可以通过**插入片段**使用。
集成终端
终端配置支持
您现在可以通过在终端下拉菜单中选择**配置终端设置**来修改终端设置。
键盘快捷键管理
默认情况下,键盘快捷键会分派到工作台,而不是按照terminal.integrated.commandsToSkipShell
设置中指定的终端进行分派。当用户输入与这些命令之一对应的键盘快捷键时,会显示一个新通知,并提供配置相关设置的选项。
要将大多数键盘快捷键发送到终端而不是工作台,您可以设置terminal.integrated.sendKeybindingsToShell
。
语言
Markdown 内联智能选择
使用以下命令在 Markdown 文档中扩展和缩小选择
- 扩展:⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)
- 缩小:⌃⇧⌘← (Windows, Linux Shift+Alt+Left)
选择适用于斜体、粗体、内联代码块和链接。
TypeScript 4.1
此版本的 VS Code 包含TypeScript 4.1.2。此主要 TypeScript 更新带来了对许多新语言特性的支持,包括模板文字类型和对[React 17 的工厂的支持,以改进 JavaScript 和 TypeScript 的语言工具。与往常一样,它还包含许多错误修复。
您可以在TypeScript 博客上阅读有关 TypeScript 4.1 的更多信息。
对 JSDoc @see 标签的初始支持
JSDoc @see
标签允许您在 JSDoc 注释中引用其他函数和类。下面的示例显示了crash
函数引用了来自另一个文件的WrappedError
类
// @filename: somewhere.ts
export class WrappedError extends Error { ... }
// @filename: ace.ts
import { WrappedError } from './somewhere'
/**
* @see {WrappedError}
*/
function crash(kind) {
throw new WrappedError(kind);
}
VS Code 现在将在执行重命名时包含基本的@see
引用。您也可以对@see
标签的内容运行**转到定义**,@see
标签也会显示在引用列表中。
我们计划在将来的版本中继续改进对@see
标签的支持。
IntelliSense 行为和类型检查的新设置
有两个新的设置控制 JavaScript 和 TypeScript 文件中的 IntelliSense 和类型检查行为,这些文件不属于显式 tsconfig 或 jsconfig 项目。
-
js/ts.implicitProjectConfig.strictNullChecks
设置启用严格的空检查。默认情况下为false
。如果您在 TypeScript 中工作,您肯定想要启用严格的空检查,因为它可以捕获许多常见的编程错误。
严格的空检查在 JavaScript 中工作时也很有用。启用严格的空检查后,悬停和 IntelliSense 信息将显示哪些类型可以是
undefined
和null
。如果您在 JavaScript 中启用类型检查,VS Code 还可以使用严格的空检查来捕获一些常见的编程错误。 -
js/ts.implicitProjectConfig.strictFunctionTypes
设置启用严格的函数类型。默认情况下为true
。严格的函数类型更难解释,但通常也会改进 IntelliSense 并可以捕获一些编程错误。
请记住,如果文件属于 jsconfig 或 tsconfig 项目,这两个设置都会被覆盖。
重命名其他隐式 JS/TS 项目设置
JavaScript 和 TypeScript 的其他隐式项目设置已重命名,使其更准确
javascript.implicitProjectConfig.checkJs
->js/ts.implicitProjectConfig.checkJs
javascript.implicitProjectConfig.experimentalDecorators
->js/ts.implicitProjectConfig.experimentalDecorators
这些设置被重命名是因为它们适用于不属于 jsconfig 或 tsconfig 项目的 JavaScript 和 TypeScript 文件。以前的设置名称暗示它们仅适用于 JavaScript 文件。
HTML
新的格式化程序设置
HTML 扩展使用JSBeautify 作为格式化程序。对最新版本的 JSBeautify(1.13)的更新带来了一些新的格式化程序设置
html.format.wrapAttributesIndentSize
:使用force aligned
和aligned multiple
时对齐大小html.format.wrapAttributes
或null
以使用默认缩进大小。html.format.templating
:遵守 django、erb、handlebars 和 php 模板语言标签。html.format.unformattedContentDelimiter
:将文本内容放在此字符串之间。
最后一个设置允许您设置一个标记,以标记不应格式化的区域
"html.format.unformattedContentDelimiter": "<!-- DoNotFormat -->"
onTypeRename 的新设置名称
用于在修改匹配的结束标记时编辑标记的**在键入时重命名**功能现在称为**链接编辑**。启用链接编辑的命令是**开始链接编辑**(⇧⌘F2 (Windows, Linux Ctrl+Shift+F2))和Escape禁用链接编辑模式。
启用它的设置现在是
"editor.linkedEditing": true
对扩展的贡献
远程开发
继续在远程开发扩展上工作,这些扩展允许您使用容器、远程机器或适用于 Linux 的 Windows 子系统(WSL)作为功能齐全的开发环境。
1.52 中的功能亮点包括
- Linux 远程上的自动端口转发。
- 用于在本地安装远程扩展的新命令。
- 您现在可以在容器中打开存储库时选择一个分支。
- 通过在后台安装扩展来提高服务器启动性能。
您可以在远程开发版本说明中了解新的扩展功能和错误修复。
笔记本
VS Code 团队正在继续进行工作以实现对笔记本的原生支持,并改进其 UX 和性能。
改进大型文本输出渲染
本机笔记本编辑器现在将在输出内容太大以至于无法保证 UI 始终响应时截断输出。您仍然可以在文本编辑器中打开输出的完整原始内容。
扩展编写
文件装饰 API
FileDecorationProvider
API 现已正式发布,可供任何扩展使用。使用此 API 可以向文件添加环境信息,例如资源管理器中显示的 SCM 和错误装饰。
撤消资源更改
资源管理器操作(例如创建文件、重命名文件或删除文件)会触发事件,允许参与,例如 onWillCreateFiles
、onWillRenameFiles
或 onWillDeleteFiles
。 此版本添加了对撤消此类资源管理器操作的支持,您应该知道,在撤消操作时不会触发上述事件。
新主题颜色
statusBarItem.errorBackground
: 状态栏错误项背景颜色。错误项会从其他状态栏条目中脱颖而出,以指示错误条件。statusBarItem.errorForeground
: 状态栏错误项前景色。错误项会从其他状态栏条目中脱颖而出,以指示错误条件。
错误背景颜色
主题作者现在可以使用新的主题颜色来处理编辑器中的错误。编辑器错误、警告和信息现在可以通过以下方式进行样式设置:
editorError.background
editorWarning.background
editorInfo.background
更新的 Codicons
我们在 codicon 库 中添加了以下新图标:
check-all
circle-large-filled
circle-large-outline
pass-filled
pinned-dirty
支持用于视图容器和视图的 codicons
您现在可以使用 codicons 作为视图容器和视图的图标。示例
"views": {
"explorer": [
{
"id": "npm",
"name": "NPM Scripts",
"icon": "$(code)",
"visibility": "hidden"
}
]
}
请参阅 图标列表,了解可用的图标列表。
链接编辑范围提供程序
以前称为 OnTypeRenameProvider
的内容现在是 LinkedEditingRangeProvider
的公共 API。
对于文档中的给定位置,LinkedEditingRangeProvider
会将具有相同内容的范围链接起来。对其中一个范围的更改可以应用于所有其他范围。
这可以在 HTML 中看到。当编辑开始标记的名称时,结束标记也会自动更新。
FoldingRangeProvider.onDidChangeFoldingRanges
FoldingRangeProvider.onDidChangeFoldingRanges
已成为公共 API。它是一个可选事件,用于表示提供程序的折叠范围已更改。
使用查询过滤器打开键盘快捷键编辑器
扩展程序现在可以在使用命令 workbench.action.openGlobalKeybindings
打开键盘快捷键编辑器时传递查询文本。
vscode.commands.executeCommand('workbench.action.openGlobalKeybindings', 'query');
fs.isWritableFileSystem
新的 fs.isWritableFileSystem
API 允许您检查给定的文件系统是否支持写入。例如,要检查 URL 为 example:/path/to/file
的文档是否位于可写文件系统上
switch (vscode.fs.isWritableFileSystem('example')) {
case true:
// The `example` filesystem supports writing.
// Keep in mind the permissions or other issues may still prevent
// a file from being written.
break;
case false:
// The `example` filesystem does not support writing (it is readonly).
break;
case undefined:
// VS Code does not know about the `example` filesystem
break;
}
自定义编辑器 可以使用 fs.isWritableFileSystem
来确定是否显示只读 UI。
Markdown 树工具提示 API
TreeItem
上使用 Markdown 作为 tooltip
的 API 已最终确定。您可以在创建 TreeItem
时将 tooltip
设置为 Markdown 字符串,或者,如果您的 Markdown 可能需要额外的时间来计算,您可以使用新的 TreeDataProvider.resolveTreeItem
来设置工具提示。
TreeItem 突出显示 API
期待已久的 TreeItemLabel
API 已最终确定。此 API 可用于在 TreeItem
的 label
上设置突出显示。您可以在“引用”视图中看到它的实际效果。
listDoubleSelection 和 listMultiSelection
在贡献的树视图中使用上下文值 listDoubleSelection
和 listMultiSelection
来启用命令现在有效。
视图欢迎内容按钮启用
您现在可以为视图欢迎内容部分设置启用上下文子句。
建议的扩展 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试使用它们。与往常一样,我们希望获得您的反馈。这是您尝试提议 API 的步骤:
- 您必须使用 Insider 版本,因为提议的 API 经常会发生变化。
- 您必须在扩展的
package.json
文件中包含以下行:"enableProposedApi": true
。 - 将 vscode.proposed.d.ts 文件的最新版本复制到项目的源代码位置。
您无法发布使用提议 API 的扩展。下一个版本中可能会出现重大更改,我们不希望破坏现有扩展。
状态栏条目背景颜色 API
我们提议为 StatusBarItem
添加一个新的属性 backgroundColor
,用于设置状态栏条目的背景颜色。目前仅支持 statusBarItem.errorBackground
,以避免状态栏看起来过于丰富多彩。将来,我们可能会将此支持扩展到更多颜色。
此新 API 的用例是使扩展能够在状态栏中指示错误条件。例如,ESLint 扩展可能会决定使用此颜色来提醒用户 ESLint 尚未为工作区启用。
更多可主题化图标
产品图标主题的工作已恢复。 产品图标主题 是一个提议的功能,允许您使用自定义图标集为 VS Code 设置样式。它适用于内置视图中的所有图标,以及所有使用 Codicon 库中图标的扩展。产品图标主题将在下一个里程碑中公开发布。
添加了许多新的图标名称,特别是针对调试、扩展和终端视图,以及设置和笔记本编辑器。
查看更新后的 图标列表。
删除提议的日志记录 API
一年前曾提出过一个日志记录 API,即 LogLevel
和 onDidChangeLogLevel
,现在已被删除。扩展可以使用输出通道 API 进行日志记录,或者在使用自定义记录器时使用 ExtensionContext#logUri
。
初步添加提议的测试 API
我们正在调查 VS Code 中的测试,并且 API 的第一个版本现在已出现在 vscode.proposed.d.ts
中。请阅读链接的问题以获取更多上下文,并参与其中,如果您有任何意见。我们预计 API 的提供程序部分将在观察者部分之前发布。
新的上下文键运算符
现在可以使用 <
、<=
、>
或 >=
来表示上下文键表达式。以下是一个示例,用于贡献一个仅在打开两个或多个工作区文件夹时出现的命令:
"contributes": {
"menus": {
...
"when": "workspaceFolderCount >= 2"
...
}
}
语言服务器协议
语言服务器协议 3.16 版本的功能集已最终确定,可在 LSP 协议网站 上找到。3.16 版本的主要亮点是:
详细的 更改日志 包含对现有请求的所有次要改进。
调试适配器协议
支持条件异常
在此里程碑中,2020 年 9 月提出的条件异常 建议 已最终确定,现在已成为 调试适配器协议 (DAP) 1.43 版本的一部分。
协议添加扩展了 setExceptionBreakpoints
请求,其中包含一个新的可选 filterOptions
属性,用于设置异常过滤器及其条件。调试适配器可以通过 supportsExceptionFilterOptions
功能来宣布其支持条件异常功能。
阐明了 StackTraceResponse.totalFrames 的语义
调试适配器协议中对 supportsDelayedStackTraceLoading
功能的描述似乎暗示,为了使延迟堆栈帧加载正常工作,适配器必须使用可用的堆栈帧的 **正确** 数量来填充 StackTraceResponse
的 totalFrames
字段。但是,对于某些调试器或运行时,这个值很难计算,这使得支持延迟堆栈帧加载变得很昂贵。
由于总帧数从未在 UI 中显示,因此我们已经阐明了 totalFrames
的原始(有些缺乏)语义描述:调试适配器现在可以为 totalFrames
提供一个较大的(不正确)值,而客户端应该准备接收比请求的帧更少的帧,并将其作为已到达堆栈末端的指示。
阐明了 RunInTerminalRequestArguments.cwd 的语义
由于 runInTerminal
请求的 cwd
属性(“当前工作目录”)不是可选的,因此无法省略该属性来表示“不关心”的情况。例如,如果调试适配器知道“cwd”已经正确,并且不需要客户端生成“更改目录”命令,那么 DAP 规范没有描述如何实现这一点。
为了解决此缺陷,我们通过添加以下说明来阐明 DAP 规范:只有在 cwd
属性包含非空路径时,客户端才需要执行更改目录命令。
工程
为问题报告器和进程资源管理器启用沙盒和上下文隔离
为了从启用 Electron 的 沙盒 和 上下文隔离 中获得更多反馈,我们推动将其启用到我们的进程资源管理器和问题报告器窗口。此配置最终将成为主 VS Code 窗口的默认配置
- 已启用
sandbox
- 已启用
contextIsolation
- 资源是从自定义
vscode-file
方案(而不是file
)中提供的
NPM 依赖项的安全供应链
我们通过利用源代码扫描和测试服务来改进 NPM 依赖项供应链,以提高构建管道安全性 and 可靠性。
Linux ARM 存储库
针对 ARM 架构 (aarch64
和 armhf
) 的 VS Code 现在已发布在以下 Linux 存储库中:
新命令
键 | 命令 | 命令 ID |
---|---|---|
在差异编辑器中聚焦主要侧 | workbench.action.compareEditor.focusPrimarySide |
|
在差异编辑器中聚焦次要侧 | workbench.action.compareEditor.focusSecondarySide |
|
在差异编辑器中聚焦另一侧 | workbench.action.compareEditor.focusOtherSide |
文档
远程开发
有多种新方法可以了解 VS Code 远程开发
- 查看“制表符与空格”视频,了解 VS Code 远程开发。
- 或者,尝试使用分步式学习模块,该模块涵盖了如何 使用 Docker 容器作为开发环境。
GitHub 集成
- 查看我们关于如何利用编辑器的 GitHub 集成的新学习模块,该模块介绍了 Visual Studio Code 中的 GitHub 简介。
我们如何公开开发 VS Code
观看开发人员 Alex Ross 和 Benjamin Pasero 在 GitHub Universe 上发表的演讲的录制内容, 我们如何公开开发 VS Code,了解我们的团队如何构建 VS Code 作为开源项目,以及如何在 GitHub 上与社区合作。
Chromebook 上的 VS Code
您知道可以在 Chromebook 上运行 VS Code 吗?我们认为这对学生和初级程序员来说是一个不错的选择。通过我们的 在 Chromebook 上使用 VS Code 学习 博客文章,了解如何在 Chrome OS(通过 Crostini)上设置 VS Code,该文章包含使用 JavaScript 和 Python 进行编码入门说明。
值得注意的修复
- 39543:在拆分的 json 设置编辑器的概述标尺中突出显示匹配的单词。
- 67905: 同时安装多个扩展 vsix 文件
- 83187: 一个配置中的环境变量会泄漏到另一个配置中。
- 88703: 使用 URI 格式的字段上的错误未在设置 UI 中报告
- 97202: ${config
} 变量在多根工作区启动配置中无法解析。 - 98041: Emmet 在评估数学表达式时忽略选择。
- 107320: 当安装包含 main 的扩展时,主题选择器不应出现。
- 107461: 调试控制台中没有保留历史记录。
- 109111: 调试控制台不尊重用户设置。
- 110077: 数据断点未在断点视图中显示。
- 110426: 支持使用来自 stdin 的读取的
--diff
参数。 - 110738: 允许扩展为自定义文件系统方案设置编辑器标签。
- 110775: Shift 右键单击已没有“永久删除”选项。
- 110854: 支持在打开的编辑器中对文件系统提供程序进行只读更改。
- 110905: CLI:除非强制,否则不要在扩展已安装的情况下访问市场。
感谢
最后,但同样重要的是,对本月为 VS Code 做出贡献的人表示衷心的感谢!
对我们的问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Simon Chan (@yume-chan)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- Alexander (@usernamehw)
对 vscode
的贡献
- Aasim Khan (@aasimkhan30)
- 修复 ListWidget 转义按钮行为 PR #110760
- 在复选框中添加了轮廓偏移以使焦点可见。 PR #110038
- @AE1020: 点击滚动条按页移动 PR #104923
- @alisonnoyes: 静音浅色主题 diff 语法高亮 PR #107926
- Andrew Casey (@amcasey): 公开 TS 服务器跟踪 PR #110534
- Andrew Branch (@andrewbranch): [typescript-language-features] 更新 importModuleSpecifierPreference 值 PR #110536
- @apogeeoak: 重新打开 Markdown 预览时防止错误。(#_107205) PR #111449
- Jonathan Belcher (@belcherj): 修复 Firefox 的合成逻辑 PR #106873
- @BTNDev: 更新了 in 代码段的 javascript PR #111062
- Borja Zarco (@bzarco): 在没有
folderUri
的情况下解析配置变量时不要失败。 PR #97203 - @chanmaoooo: 添加 'deleteWordEntire' 命令 PR #109511
- chenjigeng (@chenjigeng): 修复在 HTML 中编写 javascript 时悬停样式不正确的问题 PR #111110
- @dataleaky: 更新 package.json PR #111661
- Devansh Jethmalani (@devanshj): feat(quickinput): 在提示中支持 codicons PR #102898
- Aadhish Sriram S (@dfireBird): feat: 检测默认的暂存信息 microsoft#106907 PR #107074
- @digeff: 为 searchView/context 添加了可扩展性点 PR #109049
- Nathaniel Palmer (@diminutivesloop): 在失败时提供显示 git 命令输出的选项 PR #95354
- Dor Mesica (@dormesica): 在放弃暂存时添加了警告。 PR #94267
- David Sanders (@dsanders11)
- 修复错误消息 PR #111269
- 为 vscode.RelativePattern 的 base 参数添加 vscode.Uri 到类型 PR #111155
- 使用标签作为“跟随链接”命令的工具提示 PR #110917
- 阐明命令启用效果 PR #110423
- 使用 Array.flat() PR #110189
- Ikko Ashimine (@eltociear): 修复拼写错误 'sequece' 到 'sequence' PR #109643
- Erik Krogh Kristensen (@erik-krogh): 修复解析 Markdown 文件时的灾难性回溯 PR #109964
- Jakub Piskiewicz (@eXotech-code): 添加了一个设置以自动打开克隆的存储库。 PR #94369
- Fabio Zadrozny (@fabioz): FileSystemWatcher 限制的文档 (#_60813) PR #110858
- Himanshu Kapoor (@fleon): 允许 monaco-editor 与 Jest 正确工作 PR #109833
- Ben Curtis (@Fmstrat): 添加 ignoreSubmodules 选项 PR #88772
- John Murray (@gjsjohnmurray)
- 修复 #109733 防止在标题栏中出现双重“(只读)”后缀 PR #109736
- 修复 #106487 为 viewsWelcome 贡献的按钮实现“启用”子句 PR #107705
- Guillaume Lachance (@glachancecmaisonneuve): Windows 资源管理器图标 PR #86283
- Hung-Wei Hung (@hunghw): 使用更改的文件创建空提交 #107753 PR #107958
- Dhruva Srinivas (@IQUBE-X): 在 Markdown 代码段中添加定义列表 PR #110026
- Jean Pierre (@jeanp413)
- 修复扩展编辑器在快速导航导航栏时的故障 PR #110370
- 修复打印长行时终端在滚动时的延迟 PR #110213
- 为合并冲突中删除的文件提供更好的 diff PR #91245
- 修复源代码管理记住树折叠状态 PR #89313
- Jessica Petty (@jepetty): 添加节点任务以修复损坏的 Rich Nav 构建 PR #110762
- Josias (@justjosias): 拼写错误 hightlight -> highlight PR #108451
- @KapitanOczywisty: 比较时忽略 LineDecoration 顺序 PR #108379
- Ken Aoki (@kena0ki): 更新 xterm.css PR #109850
- Wenlu Wang (@Kingwl)
- Oliver Larsson (@LarssonOliver): 实施 git.pruneOnFetch 设置 PR #89249
- Jiaxun Wei (@LeuisKen): 在 ExtensionUrlBootstrapHandler 中缓存 OpenURLOptions PR #110725
- Jade (@lf-): 显式 fontLigatures 描述 PR #109987
- Logan Rosen (@loganrosen): 将 .ember-cli 标记为 jsonc 而不是 json PR #110541
- Mohammed Al-Dahleh (@maldahleh): #109255 - 在设置“文件:编码”下拉列表中添加编码描述 PR #109551
- Mathias Rasmussen (@mathiasvr): 允许仅 git 修订消息 PR #91838
- MD Asif Hasan (@mdasifhasan): 修复拉取和同步的 fetchOnPull 行为 PR #99324
- Seth Fitzsimmons (@mojodna): 拼写错误:Uncommited → Uncommitted PR #109119
- Nicholas Rayburn (@nrayburn-tech): 为 launch.json 添加 dirSep 变量 PR #105887
- oli (@olivercoad): 处理冲突的多字符自动闭合对 PR #110094
- @Pikachu920: 阻止将“null”意外连接到反馈 URL PR #111325
- Pablo Sebastian Greco (@psgreco)
- 进一步清理 armhfp 和 aarch64 rpm 硬编码依赖项 PR #111253
- 修复 armv7hl 和 aarch64 的硬编码 rpm 依赖项 PR #111198
- Rotem Bar (@rotem-bar): feat(extensions): 添加一个选项,在禁用具有已启用依赖项的扩展时禁用相关依赖项 PR #104997
- Andreas Ziegler (@rupran): scmViewPane: 不要在提交消息输入字段中渲染空格 PR #107913
- Dmitry Sharshakov (@sh7dm): Git: 在隐藏前询问是否保存未保存的文件 PR #94358
- Shivang Tripathi (@shivangg): feat: 自动检测 npm.packageManager #102050 PR #102494
- Shunsuke Iwamoto (@shskwmt): 修复 #93946。滚动时移除焦点。 PR #94280
- Emanuel Tesař (@Siegrift): 启用 tsec 作为语言服务插件 PR #108682
- Jonathan Mannancheril (@SneakyFish5)
- Git: 添加 cherryPick 命令 PR #104614
- 添加 git.pushTags 设置 PR #104312
- Scott Davis (@stdavis): feat: 实现 Git: Push Tags 命令 PR #110096
- Suman B K (@sumanbk92): 将 ` 包含为 foldEndPairCharacters 的一部分 PR #110108
- Tim (@Timmmm): 添加原子制表符选项 PR #107126
- @turara
- 更新 OneSnippet#move 方法以修复 #96545。 PR #108964
- 向 SearchView 添加 updateTextFromFindWidgetOrSelection 方法 PR #108401
- 更新 CodeActionOnSaveParticipant PR #108193
- Alexander (@usernamehw)
- 添加一个设置,无论语言如何,都包含基于单词的建议 PR #110494
- 修复 #99971 - 在功能贡献中显示激活事件 PR #100010
- Valter Pires (@vfcp): 为“Tomorrow Night Blue”主题更正 package.nls.json 中的 themeLabel PR #110178
- Jason Wang (@wangjaso): 提供一个选项,默认使用 github 提供程序为 git.api.getRemoteSources PR #106368
- Eno Yao (@Wscats)
- 支持键绑定浏览器上下文键 PR #110902
- 支持大于和小于 PR #110846
- 优化代码可读性 PR #110572
- @xndcn: 修复 minimap 滑块的叠加区域 PR #108448
- winwin2011 (@YuJianghao): 修复进度位溢出错误 PR #110411
- Zuckjet (@Zuckjet): 悬停信息不应该在词内断开 PR #106885
对 language-server-protocol
的贡献
- @KamasamaK
- Danny Tuppeny (@DanTup): 调整以简化规范的解析 PR# 1156
对 vscode-languageserver-node
的贡献
- Niccolò Belli (@darkbasic): 实现 ShowTextDocumentRequest PR #490
- Danny Tuppeny (@DanTup): 在 onProgress 中添加对中间件的支持 PR #690
- Julien HENRY (@henryju): 使用 appName 作为客户端信息而不是 'vscode' PR #697
对 vscode-eslint
的贡献
对 vscode-js-debug
的贡献
- Momtchil Momtchev (@mmomtchev): 添加对调试外部节点内部的支持 PR #824
对 vscode-html-languageservice
的贡献
- Jean Pierre (@jeanp413): 修复自动完成文本编辑输出 </[object Object]> PR #93
对 node-jsonc-parser
的贡献
- Dan Russell (@dangrussell): 向 typings 属性值添加文件扩展名 PR #43
对 vscode-generator-code
的贡献
- Tom Sherman (@tom-sherman): 将过时的
assert.equal
替换为strictEqual
PR #229 - Tomáš Hübelbauer (@TomasHubelbauer): 允许通过 CLI 传递 gitInit、pkgManager 和 webpack PR #227
对 vscode-vsce
的贡献
- Fabian Meumertzheim (@fmeum): 确保 package.json 在 *.vsix 中可写 PR #508
- James George (@jamesgeorge007): chore: 删除陈旧的代码 PR #511
- Matan Gover (@matangover): presense -> presence PR #510