2020 年 11 月 (版本 1.52)
更新 1.52.1:本次更新解决了这些问题。
下载:Windows: x64 Arm64 | Mac: Intel | Linux: deb rpm tarball Arm snap
欢迎阅读 Visual Studio Code 2020 年 11 月发布说明。正如在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 被明确要求打开特定文件夹或文件。一个常见的例子是在平台的资源管理器中双击文件以在 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 上通过 Dock 或启动器(而不是终端)启动 VS Code 时,VS Code 会启动一个后台进程来解析您的 shell 环境(如由 .bashrc
或 .zshrc
定义或更改)。检测到的所有环境变量随后被 VS Code 使用,这样从终端或 Dock/启动器启动没有任何区别,这在调试或执行任务时很重要。
不幸的是,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 悬停边框颜色
您现在可以自定义整个工作台的 sash (sash.hoverBorder
) 的悬停边框颜色。
树视图:展开模式
新增设置 workbench.tree.expandMode
允许您控制文件夹在树视图中如何展开:使用单击或双击。
macOS Big Sur 更新
由于 Electron 9 的问题,每当您选择重启更新时,VS Code 不会自动重启,而是直接退出。在下一个 VS Code 版本(应包含 Electron 11)发布之前,发生这种情况时,您必须手动重新启动 VS Code。阅读问题 #109728 中的更多信息。
源代码管理
保留源代码管理视图状态
源代码管理视图状态现在在会话之间得以保留。折叠的树节点即使在退出并重新启动 VS Code 后仍保持折叠。
源代码管理侧边栏操作
新增设置 scm.diffDecorationsGutterAction
允许您控制在编辑器左侧选择源代码管理侧边栏装饰时会发生什么。可选值如下
diff
- 点击时打开内联差异预览视图(默认)。none
- 禁用任何操作。
Git:新命令
命令面板中添加了一些新的 Git 命令
- Git: Cherry Pick... - 将特定提交 cherry pick 到您的分支。
- Git: 重命名 - 对活动文件执行 git 重命名。
- Git: 推送标签 - 将所有本地标签推送到远程。
- Git: Checkout 到 (分离模式)... - 在分离模式下执行 checkout。
Git:新设置
此外,还添加了新的 Git 设置
git.pruneOnFetch
- 在获取远程引用时,让 VS Code 运行git fetch --prune
。git.ignoreSubmodules
- 您现在可以确保 VS Code 忽略子模块仓库中的更改,这在大型 monorepo 中很有用。git.openAfterClone
- 控制克隆 Git 仓库后是否以及如何打开文件夹:在当前窗口、在新窗口中、未打开任何文件夹时以及通过提示用户。git.useCommitInputAsStashMessage
- 在运行Git: Stash 时,使 VS Code 将源代码管理输入框中的提交消息用作 stash 消息。git.followTagsWhenSync
- 在运行Git: Sync 时跟随标签。git.checkoutType
- 控制运行Git: Checkout... 命令时显示哪些引用以及按何种顺序显示。
Git:在 stashing 前提示保存文件
每当您尝试 stash 更改时,VS Code 现在会提示您保存未保存的文件。
Git:已删除文件合并冲突的更好差异显示
已删除文件合并冲突现在具有改进的差异体验,显示与删除操作相对的分支上文件中实际的更改。
Git:添加远程仓库时 fetch
添加远程仓库后,VS Code 现在会立即运行 git fetch
,获取该远程仓库的所有引用。
Git:Checkout 分离模式
现在可以在 VS Code 中以分离模式 checkout 引用
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 编辑器中打开文件的 workspace folder 路径。${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 的真正力量在于其扩展:主题扩展添加漂亮的颜色和图标,语言扩展提供 IntelliSense 并启用代码导航,调试器扩展使您能够深入研究错误。有时,问题是否由扩展引起,以及是由哪个扩展引起,并不总是很明显。之前,您需要禁用所有扩展,然后逐个重新启用扩展以找到有问题的扩展。通过名为扩展二分查找的新功能,现在这一过程变得简单。它使用二分搜索算法快速识别导致问题的扩展。本质上,它会禁用您一半的扩展,并要求您检查之前看到的问题是否仍然存在。如果问题消失了,那么有问题的扩展肯定在禁用的扩展列表中,而不在当前启用的扩展列表中。此过程会重复进行,直到只剩下一个扩展为止。
您可以通过命令面板中的帮助: 启动扩展二分查找命令启动扩展二分查找 (⇧⌘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
- 按来源过滤。
您可以使用 Up 和 Down 箭头在键盘快捷方式编辑器中导航搜索历史。
IntelliSense
来自其他文档的基于单词的建议
VS Code 支持简单的基于单词的建议。当语言服务不可用或语言服务无法计算结果时(例如在注释中输入时),它们非常有用。在此版本中,现在可以将 VS Code 配置为从其他打开的文件中建议单词。使用 editor.wordBasedSuggestionsMode
设置,将值设为 allDocuments
以从所有打开的文件中建议单词,设为 matchingDocuments
以从相同语言的打开文件中建议单词(默认),设为 currentDocument
以仅从当前文件中建议单词。
隐藏内联详情
VS Code 中的建议有详细信息,这些信息显示在建议旁边的单独浮动窗口中。详情视图可以关闭,然后详情预览会与建议一同内联显示。将详情与建议一同内联显示可能会占用太多空间,因此现在可以通过一个新的布尔设置 editor.suggest.showInlineDetails
禁用此功能。
TypeScript 建议显示路径
TypeScript 可以提供同时添加导入语句的完成项。然而,当存在多个同名符号时,很难选择正确的完成项。此版本使这变得更简单,因为自动导入完成项的路径会与标签一起显示。
自定义 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 行为和类型检查的新设置
有两个新设置控制 IntelliSense 以及不属于显式 tsconfig 或 jsconfig 项目的 JavaScript 和 TypeScript 文件中的类型检查行为。
-
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
: 在html.format.wrapAttributes
中使用force aligned
和aligned multiple
时的对齐大小,或者设置为null
以使用默认缩进大小。html.format.templating
: 支持 django、erb、handlebars 和 php 模板语言标签。html.format.unformattedContentDelimiter
: 在此字符串之间保持文本内容在一起。
最后一个设置允许您设置一个标签来标记不应格式化的区域
"html.format.unformattedContentDelimiter": "<!-- DoNotFormat -->"
onTypeRename 的新设置名称
当修改匹配的结束标签时编辑标签的即时重命名 (On Type Rename) 功能现在称为链接编辑 (linked editing)。启用链接编辑的命令是启动链接编辑 (Start Linked Editing) (⇧⌘F2 (Windows, Linux Ctrl+Shift+F2)),按下 Escape 键可禁用链接编辑模式。
现在启用此功能的设置是
"editor.linkedEditing": true
对扩展的贡献
远程开发
远程开发扩展的工作仍在继续,这些扩展允许您使用容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.52 版本的功能亮点包括
- 在 Linux 远程主机上自动端口转发。
- 新的命令用于在本地安装远程扩展。
- 现在在容器中打开存储库时可以选择分支。
- 通过在后台安装扩展来改进服务器启动性能。
您可以在远程开发发行说明中了解新的扩展功能和错误修复。
Notebooks
VS Code 团队正在继续努力原生支持 Notebooks 并改进其用户体验和性能。
改进大文本输出渲染
如果原生 Notebook 编辑器的输出内容过大,现在会将其截断以确保 UI 始终保持响应。您仍然可以在文本编辑器中打开输出的完整原始内容。
扩展创作
文件装饰 API
FileDecorationProvider
API 现已定稿,可供任何扩展使用。使用此 API 可以向文件添加环境信息,资源管理器中显示的 SCM 和错误装饰就使用了此 API。
撤消资源更改
资源管理器操作(如创建文件、重命名文件或删除文件)会引发事件,允许参与,例如 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
来设置 tooltip。
TreeItem 高亮 API
期待已久的 TreeItemLabel
API 已定稿。此 API 可用于设置 TreeItem
的 label
上的高亮。您可以在“引用”视图中看到它的实际应用。
listDoubleSelection 和 listMultiSelection
现在可以使用上下文值 listDoubleSelection
和 listMultiSelection
来启用贡献的树形视图中的命令。
视图欢迎内容按钮启用
现在可以为视图欢迎内容部分设置启用上下文子句。
提议的扩展 API
每个里程碑都包含新的提议 API,扩展作者可以尝试使用它们。一如既往,我们期待您的反馈。要尝试使用提议 API,您需要执行以下操作
- 您必须使用 Insiders 版本,因为提议的 API 经常变化。
- 您必须在扩展的
package.json
文件中包含以下行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目源代码位置。
您不能发布使用提议 API 的扩展。下个版本中可能存在重大更改,我们绝不希望破坏现有扩展。
状态栏条目背景颜色 API
我们为 StatusBarItem
提议了一个新属性 backgroundColor
,用于设置状态栏条目的背景颜色。目前仅支持 statusBarItem.errorBackground
,以避免状态栏看起来过于花哨。未来我们可能会将此支持扩展到更多颜色。
此新 API 的用例是使扩展能够指示状态栏中的错误情况。例如,ESLint 扩展可能会决定使用此颜色来提醒用户工作区尚未启用 ESLint。
更多可主题化的图标
产品图标主题的工作已经恢复。产品图标主题是一项提议的功能,允许您使用自定义图标集来设置 VS Code 的样式。它适用于所有内置视图中的图标以及所有使用 Codicon 库图标的扩展。产品图标主题将在下个里程碑中公开。
添加了更多图标名称,特别是调试、扩展和终端视图以及设置和 Notebook 编辑器的图标。
查看更新后的图标列表。
删除提议的日志记录 API
大约一年前存在一个关于日志记录 API(LogLevel
和 onDidChangeLogLevel
)的提议,现已删除。扩展可以使用输出通道 API 进行日志记录,或者在使用自定义日志记录器时使用 ExtensionContext#logUri
。
初步添加提议的测试 API
我们正在研究 VS Code 中的测试,第一个版本的 API 现已包含在 vscode.proposed.d.ts
中。请阅读链接的问题以获取更多背景信息,如果您有任何意见,请参与讨论。我们预计会比观察者部分更早发布提供程序部分。
新的上下文键运算符
现在可以使用 <
、<=
、>
或 >=
作为上下文键表达式。以下是贡献命令的一个示例,该命令仅在打开两个或更多工作区文件夹时显示
"contributes": {
"menus": {
...
"when": "workspaceFolderCount >= 2"
...
}
}
语言服务器协议
语言服务器协议 3.16 版本的功能集已定稿,可在 LSP 协议网站上获取。3.16 版本的主要亮点包括
详细的更改日志也包含了对现有请求的所有细微改进。
调试适配器协议
支持条件异常
在此里程碑中,2020 年 9 月的条件异常提议已定稿,现已成为调试适配器协议 (DAP) 1.43 版本的一部分。
该协议新增功能通过一个新的可选属性 filterOptions
扩展了 setExceptionBreakpoints
请求,用于设置异常筛选器及其条件。调试适配器可以通过 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 依赖供应链,以提高构建管道的安全性和可靠性。
Linux ARM 存储库
适用于 ARM 架构(aarch64
和 armhf
)的 VS Code 现已发布到以下 Linux 存储库
新命令
快捷键 | 命令 | 命令 ID |
---|---|---|
差异编辑器中聚焦主要侧 | workbench.action.compareEditor.focusPrimarySide |
|
差异编辑器中聚焦次要侧 | workbench.action.compareEditor.focusSecondarySide |
|
差异编辑器中聚焦另一侧 | workbench.action.compareEditor.focusOtherSide |
文档
远程开发
有几种新的方法可以了解 VS Code 远程开发
- 查看“Tabs versus Spaces”视频,其中讨论了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 上设置 VS Code(通过Crostini),该博文包含如何使用 JavaScript 和 Python 开始编码的说明。
值得关注的修复
- 39543: 在拆分 JSON 设置编辑器的概览标尺中高亮匹配的单词。
- 67905: 同时安装多个扩展 vsix 文件
- 83187: 一个配置的环境变量泄漏到另一个配置。
- 88703: 设置 UI 中未报告 URI 格式字段上的错误
- 97202: ${config
} 变量在多根工作区启动配置中无法解析。 - 98041: Emmet 在评估数学表达式时忽略选区
- 107320: 安装包含 main 的扩展时,不应显示主题选择器。
- 107461: 调试控制台上的历史记录未保留
- 109111: 调试控制台不遵循用户设置。
- 110077: 数据断点未显示在“断点”视图中。
- 110426: 支持从 stdin 读取时使用
--diff
参数 - 110738: 允许扩展为自定义文件系统方案设置编辑器标签
- 110775: Shift + 右键单击的“永久删除”选项不见了
- 110854: 在已打开的编辑器中支持文件系统提供程序的只读更改
- 110905: CLI:除非强制,否则如果扩展已安装,则不访问 Marketplace
致谢
最后但同样重要,衷心感谢本月为 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: Quiet Light 主题差异语法高亮 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: 更新了 JavaScript for in 片段 PR #111062
- Borja Zarco (@bzarco): 在没有
folderUri
的情况下解析配置变量时不要失败。 PR #97203 - @chanmaoooo: 添加 'deleteWordEntire' 命令 PR #109511
- chenjigeng (@chenjigeng): 修复在 HTML 中编写 JavaScript 时 Hover 样式不正确的问题 PR #111110
- @dataleaky: 更新 package.json PR #111661
- Devansh Jethmalani (@devanshj): feat(quickinput): 在提示中支持 codicons PR #102898
- Aadhish Sriram S (@dfireBird): feat: 检测默认 stash 消息 microsoft#106907 PR #107074
- @digeff: 添加了 searchView/context 的可扩展点 PR #109049
- Nathaniel Palmer (@diminutivesloop): 失败时提供显示 git 命令输出的选项 PR #95354
- Dor Mesica (@dormesica): 在删除 stash 之前添加警告。 PR #94267
- David Sanders (@dsanders11)
- 修复错误消息 PR #111269
- 将 vscode.Uri 添加到 vscode.RelativePattern 的 base 参数类型中 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 防止标题栏出现双重 '(read-only)' 后缀 PR #109736
- 修复 #106487 为 viewsWelcome contribution 的按钮实现 'enablement' 子句 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
- 更好地处理合并冲突中已删除文件的差异 PR #91245
- 修复源代码管理记住树形收起状态的问题 PR #89313
- Jessica Petty (@jepetty): 添加 node 任务以修复损坏的 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):修复 Pull 和 Sync 的 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):功能(扩展):添加了一个选项,可在禁用具有已启用依赖项的扩展时禁用相关依赖项 PR #104997
- Andreas Ziegler (@rupran):scmViewPane: 不在提交消息输入字段中渲染空白字符 PR #107913
- Dmitry Sharshakov (@sh7dm):Git:在暂存前询问是否保存未保存的文件 PR #94358
- Shivang Tripathi (@shivangg):功能:自动检测 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):功能:实现 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 - 在 Feature Contributions 中显示激活事件 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:修复小地图滑块的覆盖区域 PR #108448
- winwin2011 (@YuJianghao):修复进度条位溢出 bug 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):添加对调试外部 node 内部结构的支持 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):用
strictEqual
替换已弃用的assert.equal
PR #229 - Tomáš Hübelbauer (@TomasHubelbauer):允许通过 CLI 传递 gitInit、pkgManager 和 webpack PR #227
对 vscode-vsce
的贡献
- Fabian Meumertzheim (@fmeum):确保 *.vsix 中的 package.json 可写 PR #508
- James George (@jamesgeorge007):杂务:删除陈旧代码 PR #511
- Matan Gover (@matangover):修正拼写错误:presense -> presence PR #510