2019 年 1 月(版本 1.31)
更新 1.31.1:此更新解决了这些 问题。
下载:Windows:x64 | Mac:Intel | Linux 64 位:deb rpm tarball | 32 位:deb rpm tarball
欢迎使用 2019 年 1 月发布的 Visual Studio Code。此版本包含一些重要的更新,我们希望您会喜欢,以下是一些关键亮点:
- 安装扩展程序无需重新加载 - 安装新扩展程序时不会被打断。
- 树形 UI 改进 - 改进的资源管理器导航和筛选,水平滚动。
- 主菜单更新 - 重新设计的“转到”操作菜单,编辑菜单“剪切”命令。
- 多行问题输出 - 在“问题”面板中查看完整的 multiline 问题详细信息。
- “查找所有引用”历史记录 - 快速重新运行之前的引用搜索。
- HTML、CSS 和 JSON 的语义选择 - 根据语言语义扩展/缩小选择。
- 集成终端自动换行支持 - 终端文本会随着面板宽度变化自动换行。
- 基于命令的用户输入变量 - 为任务和调试配置提供自定义用户输入。
- 更新的扩展 API 文档 - 使用扩展指南完全重写。
如果您想在线阅读这些发行说明,请访问 更新 页面,该页面位于 code.visualstudio.com。
您还可以查看此 1.31 版本 重点视频,该视频来自云开发倡导者 Brian Clark。
发行说明按以下与 VS Code 关注领域相关的部分进行组织。以下是其他一些更新
- 工作台 - Zen 模式隐藏行号,新的屏幕录制模式显示击键。
- 编辑器 - 智能选择改进,调整“引用”代码透镜位置。
- 集成终端 - Windows 上的 ConPTY 支持,查找改进。
- 扩展开发 - 扩展更改事件,在浏览器中打开资源操作。
内部人员:想要尽快查看新功能?您可以下载 nightly 内部人员 构建并尽快试用最新更新。有关最新的 Visual Studio Code 新闻、更新和内容,请关注 Twitter @code!
扩展
安装后无需重新加载
能够在不强制重新加载(重启)VS Code 的情况下安装扩展程序是我们收到的投票数最多的功能请求之一,我们在本次版本中为您实现了这一功能。安装或启用扩展程序后,您不再需要重新加载 VS Code。
在下面的示例中,用户在打开 .vue
文件后,按照建议安装了 Vetur 扩展程序。请注意,Vetur 扩展程序提供的语言功能(如语法着色、诊断错误)在安装推荐的扩展程序后会立即生效。
卸载或禁用未激活的扩展程序时,也不需要重新加载。
注意:某些扩展程序需要重新加载,因为它们具有外部贡献(对其他扩展程序的扩展点做出贡献)。这需要外部贡献点所有者的采用,方法是侦听 extensions.onDidChange
事件。
工作台
新的树形小部件
我们已经将小部件的游戏提升到了一个新的水平:我们创建了一个新的树形小部件,以解决性能问题,并使我们能够在多个工作台区域中提供更多功能。新的树形小部件是通过将我们的高性能列表小部件进行组合创建的。我们打算专门写一篇博客文章介绍这项工程工作和性能改进。现在,我们将重点介绍功能。
注意:新树形小部件已应用于文件资源管理器、所有调试树形小部件、搜索和“快速查看引用”。以下描述的功能适用于大多数这些 UI 区域,除非我们明确禁用。
改进的键盘导航
现在树形小部件中有三种不同的键盘导航类型:simple
、highlight
和 filter
。在 highlight
和 filter
模式下,在树形小部件中输入内容会显示一个小部件(控件)在树形小部件的顶部,这表明您现在正在导航树形小部件
此小部件还可用于在 highlight
和 filter
模式之间切换。如果您想要一个用于在模式之间切换的键盘快捷键,您可以配置一个键绑定来执行 list.toggleFilterOnType
命令。工作台 > 列表:键盘导航 (workbench.list.keyboardNavigation
) 设置设置默认模式,包括 simple
模式,在这种模式下,键入树形小部件元素的前几个字符只会将焦点放在该元素上。
对于列表/树形小部件操作具有单字母键绑定的用户,他们仍然可以通过使用 listAutomaticKeyboardNavigation
上下文键来使用此功能。例如,VIM 扩展程序将此上下文键设置为 false
以禁用自动键盘导航,并将键绑定 /
添加到 list.toggleKeyboardNavigation
命令,因此用户只需键入 /
即可导航树形小部件。有关详细信息,请参阅 VSCodeVIM 拉取请求。
主题作者可以使用以下新的主题键自定义小部件的颜色
listFilterWidget.background
listFilterWidget.outline
listFilterWidget.noMatchesOutline
注意:这些键盘导航模式目前仅适用于已解析的树形小部件节点。例如,在文件资源管理器中,如果从未展开文件夹,则树形小部件不会查找其子级。我们正在考虑几种选择来改善这种体验。
分层选择所有
在树形小部件中按 Ctrl+A
(macOS 上为 Cmd+A
) 现在将以分层方式扩展树形小部件的选择。
可自定义的缩进
您现在可以使用 工作台 > 树形小部件:缩进 (workbench.tree.indent
) 设置自定义整个工作台的所有树形小部件的节点缩进。
展开/折叠所有
按住 Alt
键,同时展开/折叠树形小部件节点,现在将递归地执行此操作。请注意,递归展开仅适用于之前已在树形小部件中显示的节点。例如,文件资源管理器不会自动展开之前从未由用户展开的文件夹。
水平滚动
工作台 > 树形小部件:水平滚动 (workbench.tree.horizontalScrolling
) 设置现在可以在更多树形小部件和列表上启用水平滚动,包括资源管理器、搜索、SCM、调试等。
问题面板
多行消息
“问题”面板现在会在单独的行上显示多行诊断消息。下面的示例显示了 TypeScript 的多行错误消息是如何显示的。
您还可以使用折叠/展开按钮或 问题:在单行中显示消息 和 问题:在多行中显示消息 命令来切换显示或隐藏完整消息。
使用键盘快捷键触发代码操作
您现在可以使用与快速修复命令相同的默认键盘快捷键 ⌘. (Windows、Linux Ctrl+.) 从“问题”面板触发代码操作。
改进的“转到”菜单
我们在“转到”菜单中添加了更多导航操作,以便更轻松地发现这些操作
资源管理器上下文菜单中的“剪切”命令
根据用户的普遍要求,我们已将“剪切”命令添加到资源管理器上下文菜单中。
快速滚动
按住 Alt
键可以在编辑器和资源管理器中启用快速滚动。默认情况下,快速滚动使用 5 倍的速度倍增器,但您可以使用 编辑器:快速滚动灵敏度 (editor.fastScrollSensitivity
) 设置控制倍增器。
Zen 模式隐藏行号
启用 Zen 模式现在还会隐藏编辑器行号。可以使用 zenMode.hideLineNumbers
设置控制此行为。
在 Linux 中添加了带自定义菜单的键盘导航
我们的自定义菜单现在支持使用 Page Up/Down
和 Home/End
键快速跳转到菜单的开头或结尾。
在 Windows/Linux 中双击应用程序图标以关闭
由于技术上的权衡,默认情况下,Windows 和 Linux 上的自定义标题栏会移除双击应用程序图标以关闭窗口的功能。可以通过启用 window.doubleClickIconToClose
设置来恢复此功能,但您将无法再从此位置拖动窗口,也无法在 Windows 上获取系统上下文菜单。
编辑器选项卡的关闭顺序
新的设置 workbench.editor.focusRecentEditorAfterClose
允许您更改编辑器选项卡的关闭顺序。默认情况下,选项卡将按最近使用 (MRU) 的顺序关闭。更改此设置将允许从右到左关闭选项卡。
新的标题变量
有三个新的变量可以在 window.title
设置中使用
${activeFolderShort}
:包含文件的文件夹的名称。${activeFolderMedium}
:包含文件的文件夹的路径,相对于工作区文件夹。${activeFolderLong}
:包含文件的文件夹的完整路径。
输出面板
输出面板中的智能滚动行为现在更高效。当您在输出面板中的任何位置单击时,滚动将锁定,当您单击最后一行时,滚动将解锁。
屏幕录制模式
VS Code 中新增了 **屏幕录制模式**,它会突出显示光标位置和按键。屏幕录制模式(**开发者:切换屏幕录制模式**)对于演示目的非常有用。
编辑器
智能选择
我们一直在努力改进 **选择** 菜单中的 **扩展选择** 和 **缩小选择** 的实现。我们正在添加 API,以便语言服务器可以根据其语义知识指定选择步骤。此外,我们也改进了默认实现。
敬请关注,智能选择功能会不断改进。使用 smart-select
标签查看我们正在进行的工作。
引用历史记录
现在,引用视图中提供了一个 **引用:显示历史记录** 命令。它会打开一个快速选择列表,其中包含以前的搜索,允许快速重新执行以前的搜索。
引用 CodeLens
选择引用 CodeLens 时,会打开一个预览编辑器。现在可以使用 references.preferredLocation
设置控制它。它的选项是 peek
和 view
,后者将在新视图中显示引用。
代码片段描述
过去,在编写带有较长描述的代码片段时,您只能编写一个较长的字符串。不支持使用数组,就像 body
一样。现在已经改变了,可以使用字符串数组编写较长的描述。
{
"prefix": "happy",
"body": "#Happy Coding!",
"description": ["First Line", "Second Line", "Third Line"]
}
删除了旧的搜索模式
在 20 个版本前,我们开始使用 ripgrep 进行 VS Code 中的搜索。我们基于 Node.js 的旧搜索实现仍然可以通过 search.useLegacySearch
设置使用。但是,正如 Marie Kondo 所说,我们必须整理那些不再带来喜悦的东西。如果您一直使用反向引用或前瞻等正则表达式功能,请确保启用 search.usePCRE2
设置。
使用简单的文本编辑器以 JSON 格式编辑设置
在类似的主题中,现在我们已经有了几个版本的设置 UI,我们正在研究简化 JSON 设置编辑体验。如果您通过打开 settings.json
文件或点击设置 UI 中的 {}
按钮或调用 **首选项:打开用户设置(JSON)** 命令以 JSON 格式编辑设置,那么您将获得一个简单的 JSON 编辑器,而不是我们之前使用的拆分 JSON 编辑器。您仍然可以使用 **首选项:打开默认设置(JSON)** 命令查看默认设置列表。
如果您真的很想念左侧带有默认设置的拆分 JSON 编辑器,则可以通过启用 workbench.settings.useSplitJSON
设置将其恢复。请注意,如果您喜欢以 JSON 格式编辑设置,那么您始终可以这样做。
对扩展的支持网络代理
现在,**Http:代理支持**(http.proxySupport
)设置默认情况下为所有扩展启用网络代理支持。
语言
TypeScript 3.3
我们现在捆绑了 TypeScript 3.3.1。此 TypeScript 更新带来了一些重要的错误修复和改进。
删除 markdown.previewFrontMatter 设置
markdown.previewFrontMatter
设置已被删除。Markdown 预览现在始终隐藏 YAML 前置信息(这是 markdown.previewFrontMatter
的默认设置)。
Markdown 扩展,例如 Markdown yaml Preamble 和 GitHub Markdown Preview 在预览中将前置信息呈现为表格。
语义选择
语义选择现在可用于 HTML、CSS/LESS/SCSS 和 JSON
集成终端
回流支持
当终端水平调整大小后,它现在将换行和取消换行。
Windows 上的 ConPTY 支持
通过 Windows ConPTY API 管理终端进程现在可以在 Windows 预览体验计划快速通道(版本号 18309+)中作为可选功能使用。
{
"terminal.integrated.windowsEnableConpty": true
}
这将使用 Windows 控制台团队提供的 ConPTY 系统作为终端的后端。启用此功能应解决 Windows 终端中的许多问题,尤其是在颜色支持、交互式应用程序和本机支持 VT 序列的 shell 方面。
以下是 WSL 终端中 256 种 ANSI 颜色支持的对比图
用于链接的当前工作目录
在 Linux 和 macOS 上,终端现在将解析相对于当前工作目录的链接,而不是终端的初始目录。
终端中查找的改进
终端中的查找现在支持增量式“边输入边查找”搜索,以及在单行上查找多个词语的功能。
对 commandsToSkipShell 设置的改进
以前,terminal.integrated.commandsToSkipShell
设置是一个所有命令的列表,这些命令将跳过终端的评估,而是由 VS Code 处理。这很尴尬,因为您需要在设置文件中列出 100 多个命令才能更改它。现在,这已更改为添加和删除的列表,因此您只需包含对默认列表的更改即可
{
"terminal.integrated.commandsToSkipShell": [
// Make ctrl+n open a new file when the terminal is focused
"workbench.action.files.newUntitledFile",
// Send ctrl+e to the terminal
"-workbench.action.quickOpen"
]
}
启用了新的缓冲区实现
基于 TypedArray/ArrayBuffer 的终端缓冲区 在 v1.29 中引入 现在已启用,旧的实现已被删除。这应该会提高终端的吞吐量,并显着降低其内存占用。
调试和任务
自定义命令用户输入变量
上一个里程碑中引入的 输入变量 是一种强大的机制,可以在任务或调试配置中请求用户输入。最初,我们提供了 promptString
和 pickString
输入变量。
在本里程碑中,我们引入了一种新的输入变量类型 command
,它在插值输入变量时会运行任意命令。由于命令可以由扩展贡献,因此现在可以通过新的实现扩展用户输入变量。
以下示例显示了如何在调试配置中使用类型为 command
的用户输入变量,该配置允许用户从特定文件夹中找到的所有测试用例列表中选择一个测试用例。假设某个扩展提供了 extension.mochaSupport.testPicker
命令,该命令可以在可配置的位置定位所有测试用例,并显示一个选择器 UI 来选择其中一个。
{
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Test",
"program": "${workspaceFolder}/${input:pickTest}"
}
],
"inputs": [
{
"id": "pickTest",
"type": "command",
"command": "extension.mochaSupport.testPicker",
"args": {
"testFolder": "${workspaceFolder}/tests"
}
}
]
}
任务输出支持拆分终端
您现在可以配置任务以在拆分的终端面板中显示输出,而不是创建一个新的终端面板。任务配置可以在 presentation
部分使用 group
属性来定义任务的输出应该显示在何处。
如果您运行下面两个任务,它们将在拆分的终端中显示,因此您可以同时看到两个任务。
{
"version": "2.0.0",
"tasks": [
{
"label": "Task One",
"type": "shell",
"command": "echo One && sleep 5000",
"problemMatcher": [],
"presentation": {
"group": "groupA"
}
},
{
"label": "Task Two",
"type": "shell",
"command": "echo Two && sleep 5000",
"problemMatcher": [],
"presentation": {
"group": "groupA"
}
}
]
}
预览功能
预览功能尚未准备好发布,但功能足够强大,可以供使用。我们欢迎您在开发过程中尽早提供反馈。
工作台的网格布局
工作台布局正在进行重新设计,以便使用与编辑器本身相同的网格布局。这里正在进行的工作不仅会简化长期维护工作台布局的工程工作,而且还会帮助我们点亮新的体验。
在本里程碑中,我们发布了其中一项体验,以演示使用新的网格布局可以更容易地实现的某些功能,即切换编辑器区域。启用实验性网格布局后 ("workbench.useExperimentalGridLayout": true
),将提供一个新的命令 **切换编辑器区域**,该命令会隐藏代码编辑器。这允许您创建一个 VS Code 终端面板,该面板占据整个编辑器区域,如下所示
如果您使用 code file.txt
从终端打开文件,它仍然会像您预期的那样弹出一个编辑器。此功能仍在开发中,存在已知问题,但我们鼓励您查看它并提交问题。您可以使用 此查询 了解有关此工作的最新问题。
HTML 和 CSS 自定义数据支持
由于此功能处于预览状态,因此设置、贡献点和数据格式可能会发生变化。
如今,前端开发人员通常使用 HTML/CSS 的超集进行编码
- Web Components 允许使用自定义 HTML 元素,例如
<my-button type="alert"></my-button>
。 - PostCSS 允许使用自定义 CSS 属性,例如
size
,以及尚未标准化的 CSS 功能,例如:any-link
。 - 各种框架允许在源 HTML/CSS 中实现更大的灵活性。
在本迭代中,我们改进了 HTML 自定义数据支持(在 1.30 中引入)并添加了 CSS 自定义数据支持。
- 使用
html.experimental.customData
或css.experimental.customData
加载自定义数据。(html.experimental.custom.tags
和html.experimental.custom.attributes
已删除。) - 或者,将 JSON 打包到扩展中,使用
contributes.html.experimental.customData
或contributes.css.experimental.customData
。 - 最后,如果您正在编写使用 vscode-html-languageservice 或 vscode-css-languageservice 的语言服务器,则可以使用自定义数据创建语言服务器。
自定义数据增强了 VS Code 对 HTML/CSS 的理解。例如,使用这些 HTML/CSS JSON 贡献,VS Code 可以为自定义 HTML 标签/属性和 CSS 属性/伪类提供代码补全和悬停提示
{
"version": 1,
"tags": [
{
"name": "my-button",
"description": "My button",
"attributes": [
{
"name": "type",
"description": "My button type",
"values": [{ "name": "alert" }]
}
]
}
]
}
{
"version": 1,
"properties": [
{
"name": "my-size",
"description": "Compiles down to `width` and `height`. See details at https://github.com/postcss/postcss-size."
}
],
"pseudoClasses": [
{
"name": ":my-link",
"description": ":any-link pseudo class. See details at https://preset-env.cssdb.org/features#any-link-pseudo-class."
}
]
}
上述示例可在 octref/simple-customdata 找到,而功能更全面的示例可在 octref/svg-data 找到。
这些指南解释了数据格式以及如何通过设置和扩展贡献点使用它们。
扩展开发
扩展更改事件
添加了一个新的事件 extensions.onDidChange
,当 extensions.all
数组发生变化时触发。这可能发生在安装、卸载、启用或禁用扩展时。请参阅 安装扩展时不重新加载 部分。
/**
* An event which fires when `extensions.all` changes. This can happen when extensions are
* installed, uninstalled, enabled or disabled.
*/
export const onDidChange: Event<void>;
注意:引入新贡献点的扩展作者应监听此事件,并相应地更新工作台状态。
在浏览器中打开资源
我们已经注意到,一些扩展使用像 opn
或 open
这样的节点模块来在浏览器中打开 URL。鉴于对这种功能的需求,我们添加了一个新的 API vscode.env.openExternal
。它期望一个 URL,并且可以用来打开网站链接、邮件链接或应用程序 URL 处理程序。此外,文件 URL 也被接受,以便在它们的默认应用程序中打开它们,例如 PDF 文件。
// open default browser
await vscode.env.openExternal(
vscode.Uri.parse('https://github.com/microsoft/vscode/issues/66741')
);
注意:目前使用 opn
或 open
模块的扩展作者应切换到此新的 API。
全局存储路径
现在,扩展提供了一个全局存储路径 ExtensionContext.globalStoragePath
,它指向一个具有读写访问权限的本地目录。如果需要存储可从所有工作区访问的大文件,这是一个不错的选择。
/**
* An absolute file path in which the extension can store global state.
* The directory might not exist on disk and creation is
* up to the extension. However, the parent directory is guaranteed to be existent.
*
* Use [`globalState`](#_ExtensionContext.globalState) to store key value data.
*/
globalStoragePath: string;
当扩展被移除时,VS Code 会负责清理此路径。
注意:目前使用自定义文件系统位置在工作区之间存储状态的扩展作者应切换到此新的 API。
CodeActionKind.intersects
CodeActionKind.intersects
方法用于检查 CodeActionProvider
是否应该费心计算其代码操作。
import * as vscode from 'vscode';
export class OrganizeImportsProvider implements vscode.CodeActionProvider {
public provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range,
context: vscode.CodeActionContext,
token: vscode.CancellationToken
): vscode.CodeAction[] {
// Only return organize imports actions if they were explicitly requested
// We can check this using `intersects`.
if (!context.only || !vscode.CodeActionKind.SourceOrganizeImports.intersects(context.only)) {
// Organize imports actions were not requested
return [];
}
// Organize imports was requested
...
}
}
contributes.resourceLabelFormatters
扩展现在可以贡献资源标签格式化程序,这些格式化程序指定了如何在工作台中的任何地方显示 URI。例如,以下是如何扩展贡献一个用于具有方案 remotehub
的 URI 的格式化程序。
"contributes": {
"resourceLabelFormatters": [
{
"scheme": "remotehub",
"formatting": {
"label": "${path}",
"separator": "/",
"workspaceSuffix": "GitHub"
}
}
]
}
这意味着所有具有方案 remotehub
的 URI 将通过仅显示 URI 的 path
段来呈现,并且分隔符将为 /
。具有 remotehub
URI 的工作区将在其标签中具有 GitHub 后缀。
向键绑定添加参数
在 package.json
中定义键绑定时,现在可以定义参数。执行时,这些参数将传递给命令。
在下面的示例中,它是:{foo: 1, bar: 2}
。
"keybindings": {
"key": "cmd+i",
"command": "myCommand",
"args": {
"foo": 1,
"bar": 2
}
}
完全控制创建终端环境
当新设置 TerminalOptions.strictEnv
设置为 true 时,它不会对终端环境进行任何修改,而是会完全按照扩展传递的方式使用它。
// This will create a terminal whose environment only contains the single value
// FOO=BAR.
const terminal = createTerminal({
name: 'Test terminal',
env: {
FOO: 'BAR'
},
strictEnv: true
});
Node.js 更新
VS Code 运行的 Electron 版本已更新,随之而来的是 Node.js 从 8.9
更新到 10.2.0
。所有扩展现在都将在此更新版本的 Node.js 上运行。请查看 Node v10.0.0 弃用 以获取 Node.js 10 中弃用项的列表。
更新的 Octicons
我们已经将我们的 Octicons 版本更新到 8.3.0,现在支持以下图标
$(arrow-both)
$(bold)
$(color-mode)
$(eye-closed)
$(fold-down)
$(fold-up)
$(grabber)
$(italic)
$(kebab-horizontal)
$(kebab-vertical)
$(note)
$(organization-filled)
$(person-filled)
$(project)
$(request-changes)
$(screen-full)
$(screen-normal)
$(smiley)
$(tasklist)
$(text-size)
$(unverified)
$(verified)
您可以 阅读我们的文档 以查看我们支持的图标的完整列表。有关更改的完整详细信息列表,请参阅 Octicon 变更日志。
建议的扩展 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试使用它们。一如既往,我们渴望收到您的反馈。以下是尝试提议 API 的方法。
- 您必须使用 Insiders,因为提议的 API 会经常发生变化。
- 您必须在扩展的
package.json
文件中包含以下行:"enableProposedApi": true
。 - 将 vscode.proposed.d.ts 文件的最新版本复制到您的项目中。
请注意,您无法发布使用提议 API 的扩展。我们可能会在下一个版本中进行重大更改,我们决不希望破坏现有的扩展。
SignatureHelpContext.activeSignatureHelp
提议的 SignatureHelpContext.activeSignatureHelp
字段跟踪以前活动的签名。
import * as vscode from 'vscode';
class MySignatureHelpProvider implements vscode.SignatureHelpProvider {
provideSignatureHelp(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.SignatureHelpContext
): vscode.ProviderResult<vscode.SignatureHelp> {
// The active signature help when this provider was triggered or undefined if
// no signature help was active.
console.log(context.activeSignatureHelp);
...
}
}
提供者可以使用它来跟踪在签名帮助提供者被重新触发之前选择了哪个重载。
自动修复和 CodeAction.isPreferred
代码操作 API 为 VS Code 的快速修复提供支持(您在编辑器中看到的灯泡)。虽然对于给定的错误可能存在许多快速修复,但通常其中一个快速修复是对问题的最合理修复。例如,修复拼写错误通常比生成新字段更可能是修复方法。
通过使用提议的 API,扩展可以在 CodeAction
上设置 isPreferred
以表明它是对底层问题的最合理修复。可以使用 自动修复 命令(⌥⌘. (Windows, Linux Shift+Alt+.))自动应用首选修复。
首选快速修复通常应该
- 正确修复底层错误(而不是抑制它)。
- 是对错误的合理修复。
- 不要意外地执行广泛的操作。
重构代码操作也可以标记为首选,以表明它们是最合理的重构。例如,虽然可能存在多个 提取常量 重构,但用户通常只希望提取到最近的局部变量。如果该重构代码操作被标记为 isPreferred
,用户可以为它设置一个单独的键绑定。
{
"key": "ctrl+shift+r ctrl+e",
"command": "editor.action.codeAction",
"args": {
"kind": "refactor.extract.constant",
"preferred": true
}
}
修复所有源操作
提议的 source.fixAll
CodeActionKind
为可以自动修复文件中的错误的扩展建立了一种约定。这种新的源操作类型类似于 整理导入,并且可以轻松地为修复所有操作配置键绑定或在保存时启用自动修复。
// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.organizeImports": true,
}
TSLint 扩展 已经使用这种提议的源代码操作类型来实现修复所有和在保存时自动修复。
调试适配器协议
提议的调试适配器协议用于数据断点
作为对 数据断点(又名“监视点”)的持续工作 的后续步骤,我们在数据断点的调试适配器协议设计方面取得了一些进展。提议的 DAP 更改位于此 分支 上,相应的 TypeScript API 可以在此 数据断点提案 中找到。
如果您有兴趣在您的调试器扩展中支持数据断点,请查看 提案 并提供反馈。
实时主题编辑
在开发颜色主题扩展时,您可以在 扩展开发主机 窗口中看到颜色更改实时应用。
这同样适用于文件图标主题。
工程
Electron 3.0 更新和 Electron 4.0 探索
在本里程碑中,我们完成了将 Electron 3 打包到 VS Code 中的探索工作,使其成为我们第一次在稳定版中发布此 Electron 版本。这是一个主要的 Electron 版本,并附带了 Chrome 66 和 Node.js 10.x(与我们当前版本相比是一个巨大的进步,当前版本包含 Chrome 61 和 Node.js 8.x)。
与此同时,我们开始探索更新到 Electron 4,我们希望尽快将其推送到 Insiders 中。
更好的性能信息
在此版本中,开发人员:启动性能 命令输出以编辑器形式呈现,不再在 DevTools 中呈现。这使得它更容易阅读,并且可以更快地访问。此外,已经修复了有关信息的许多问题。
WinJS.Promise 移除 ✅
当 VS Code 启动时,JavaScript 还不是今天的样子。例如,当时没有原生承诺,因此团队决定使用 WinJS.Promise
来进行异步工作。如今,情况已经不同:原生承诺是真实的,而 WinJS.Promise
已经过时。从去年年中开始,我们开始努力从代码库中移除 WinJS.Promise
,并在 12 月完成了这项工作。
严格的空值检查
我们继续努力 对主要的 VS Code 代码库进行严格的空值检查。感谢 您的帮助,在本里程碑中,我们能够为大量测试文件启用严格的空值检查,这消除了大量错误。
我们将在下一个里程碑中继续进行严格的空值检查工作。
对扩展的贡献
我们的团队维护或贡献了许多 VS Code 扩展。本月最值得注意的是
TSLint 支持
新的 TSLint 扩展现在支持使用 source.fixAll
代码操作在保存时自动修复。
"editor.codeActionsOnSave": {
"source.fixAll": true
}
我们建议所有使用已弃用的 TSLint(eg2.tslint)扩展的用户迁移到新的 TSLint 扩展。
Stylus 语言支持
现在,Stylus 语言扩展 使用来自 vscode-css-languageservice 的精选数据来提供最新完成情况,并带有状态警告和语法文档。
GitHub 拉取请求
在本里程碑中,我们继续对 GitHub 拉取请求 扩展进行改进。
以下是部分新增功能
- GitHub 审查支持。现在您可以将评论分组到 审查 中,而不是单独添加它们。
- 当工作区是 GitHub 存储库时,扩展可以在您加入 Live Share 会话时无缝运行。
- 我们逐渐将 GraphQL 引入项目,因此描述视图现在显示了有关拉取请求的更详细信息,并且扩展的整体性能得到提升。
- 合并拉取请求时,现在可以选择 **创建合并提交**、**压缩合并** 或 **变基合并**。
- 性能改进。我们减少了浏览拉取请求、文件更改和签出拉取请求时的 GitHub API 调用和 git 操作,这使得扩展响应更快,尤其是在 Windows 上。
您可以在 vscode-pull-request-github 版本 中阅读扩展的完整发行说明。
新文档
Python Jupyter 笔记本
新的 使用 Jupyter 笔记本 主题描述了如何在 VS Code 中打开、调试和导出 Jupyter 笔记本。
改进的 JavaScript 和 TypeScript 文档
我们更新了 JavaScript 和 TypeScript 文章,确保它们是最新的,并提供更多有用的信息。
现在,JavaScript 和 TypeScript 页面提供了 VS Code 为这些语言提供的功能概述。对这些功能和教程的更详细解释已移至目录中的 **Node.js / JavaScript** 和 **TypeScript** 下的新页面。
更新的扩展 API 文档
对于扩展作者,VS Code API 文档已重写并移至其自己的目录。
您将在其中找到文章,以
重要修复
- 7570: VS Code 无法脱机打开
- 14372: 扩展:禁用状态需要在窗口之间传递
- 34396: 单 CPU VM 上的 CPU 占用率高
- 58167: 恢复操作系统后,终端和迷你地图恢复纹理损坏
- 59794: 当 editor.accessibilitySupport 设置为 'auto' 时,终端屏幕阅读器支持不起作用
- 61649: 调试无法读取属性 'onError' 的 undefined
- 63832: 调试扩展时无法连接到 lsp 服务器
- 64948: GDB C/C++ 调试器无法启动,显示错误
- 65697: 使用 autoAttachChildProcesses 的 Debug stopOnEntry 在节点集群派生进程中没有被遵守
- 66302: Ctrl + L 应该默认绑定到清除 repl
- 66681: 虚拟文档未显示 "选择以比较" 和 "与所选内容比较" 命令
此版本还包括针对 Microsoft 安全响应中心 CVE-2019-0728 的安全更新。
感谢
最后但同样重要的是,我们要对以下人士表示衷心的感谢,他们帮助使 VS Code 变得更好
对我们问题跟踪的贡献。如果您想帮助我们管理传入问题,请查看我们的 社区问题跟踪 页面
- Alexander (@usernamehw)
- Simon Chan (@yume-chan)
- Prabhanjan S Koushik (@skprabhanjan)
- Eric Amodio (@eamodio)
- Christopher Leidigh (@cleidigh)
对 vscode
的贡献
- Alec Chan (@aechan): 搜索:改进清除按钮行为 PR #63082
- Alexander Eyers-Taylor (@aeyerstaylor)
- Agustín Rodríguez (@agurodriguez): 阻止 "报告问题" 和 "进程浏览器" 窗口在全屏模式下打开 PR #64839
- Anirudh Rayabharam (@anirudhrb): 修复了问题 65204:打开的键绑定图标消失 PR #65968
- @asaf050: 允许从终端上下文菜单中杀死终端 PR #66535
- Chris Patterson (@chrisrpatterson): 更新构建徽章 URL PR #67008
- Christian Alexander (@ChristianAlexander): 添加对 git add -N 添加的文件的显示处理 PR #59163
- Christian Flach (@cmfcmf): 将 terminalGroup 添加到任务中,以便允许在拆分窗格中运行它们 PR #65973
- Christian Oliff (@coliff): EditorConfig.org 的 HTTPS 链接 PR #65358
- Danny Tuppeny (@DanTup): 修复拼写错误: "accepeted" => "accepted" PR #64976
- @davidwu226: 修复无效的 JSON。 PR #65447
- Donald Pipowitch (@donaldpipowitch): 添加 .vscodeignore 语法高亮 PR #64960
- Thai Pangsakulyanont (@dtinth): 使用 jsonc.parse 代替 JSON.parse 解析 tsconfig.json,修复了当 tsconfig.json 包含注释时
-b
标志未激活的错误。 PR #67535 - Thien Do (@dvkndn): 将 nvmrc 更新到 node 8 PR #67183
- Ashwin Ramaswami (@epicfaace)
- Phil (@flurmbo): 检测 md 图片链接 PR #66958
- li zixiang (@fuafa): 将严格空检查添加到 findModel.test.ts PR #66436
- Gabriel Arjones (@g-arjones): 修复 #59635 PR #60111
- @g1tman: 当终端不可见时,不要在调整大小后在终端中获取字体 PR #66781
- Gabriel DeBacker (@GabeDeBacker): 允许终端创建忽略 VSCode 的进程环境 PR #64733
- Chris Ganga (@gangachris)
- 为 src/vs/base/test/common/async.test.ts 启用严格空检查 PR #65442
- 为 ./vs/base/test/common/keyCodes.test.ts 启用严格空检查 PR #65454
- 为 ./vs/base/test/common/octicon.test.ts 启用严格空检查 PR #65458
- 为 ./vs/base/test/node/config.test.ts 启用严格空检查 PR #65471
- 为 ./vs/base/test/common/event.test.ts 启用严格空检查 PR #65444
- 为 ./vs/base/test/common/history.test.ts 启用严格空检查 PR #65453
- 为 windowsFinder 启用严格空检查 PR #65551
- 为查找控制器启用严格空检查 PR #65553
- Gaurav Gupta (@gaurav5430): 为 ./vs/platform/contextkey/test/common/contextkey.test.ts 启用严格空检查 PR #65474
- Guy Waldman (@guywald1): [git] 添加命令从特定引用创建分支 PR #59078
- Henk Mollema (@henkmollema): 将版权年份更新为 2019 PR #65875
- Ilya Biryukov (@IlyaBiryukov): 添加 Git 日志、全局配置和树差异 API PR #64826
- James Dinh (@jamesdinht): 为文件测试启用严格空检查 PR #65249
- James George (@jamesgeorge007): 在用户片段中添加多行描述支持 PR #66159
- Jimi (Dimitris) Charalampidis (@JimiC): [主题] 添加在不重启编辑器的情况下重新加载主题的能力 PR #66115
- Julia McGeoghan (@jkmdev)
- Joseph Duchesne (@josephduchesne): 通过触发布局刷新来解决 #58159,以解决 xtermjs 错误… PR #60221
- Josh Goldberg (@JoshuaKGoldberg)
- Krish De Souza (@Kedstar99)
- Kermit Xuan (@Kermit-Xuan)
- Claire (@krider2010): 允许完全禁用更新或手动更新,以及自动更新 PR #60973
- Kumar Harsh (@kumarharsh): fix(loc): 修复透明颜色描述的错误措辞 PR #66334
- Anton Marchenko (@marchenko-am): 修复 #64379 - SimpleFindWidget 位置已更改(处于隐藏状态) PR #64558
- Mathias Rasmussen (@mathiasvr): HTML 片段:一致的空标签 PR #66072
- Maksymilian Barnaś (@maxbarnas): #61410 为“在文件夹中查找”操作添加键绑定 PR #61526
- Mrigank Krishan (@Mrigank11): 询问是否将已知的巨大文件夹添加到 .gitignore,修复 #44304 PR #44562
- J.M. Rütter (@mynetx): 隐藏在 term 分割上短暂显示的未定义标题 PR #61981
- Néstor Hernández Ojeda (@nesukun): 为 scm/git 上下文菜单添加强制推送条目 PR #60387
- Noj Vek (Manoj P) (@nojvek): 修复 #27107 - 用户终端的链接 cwd PR #64750
- Nuno Lopes (@nunottlopes): 修复在 Windows 上有空格的路径下在终端中运行活动文件 PR #65331
- Oleg Voloshin (@oniondomes): 为 workspaceStats 测试启用严格空检查 PR #65429
- Raul Piraces Alastuey (@piraces): 为 suggestMemory.test.ts 添加严格空检查 PR #66754
- Prateek Singh (@punteek): 为 simpleServices 测试启用严格空检查 PR #65571
- Rich Evans (@rcbevans): 添加 xterm mouseleave 以关闭小部件 PR #66576
- Matthias Reitinger (@reima): 修复键绑定列表标题行为问题(#_41558) PR #60217
- Romain Marcadier-Muller (@RomainMuller): 修复使用引用时的“tsc watch”任务 PR #67148
- Rudi Chen (@rudi-c): 为 breadcrumbs.ts、outlineModel.ts、breadcrumbsModel.ts 启用 strictNullChecks PR #65062
- Segev Finer (@segevfiner)
- @SimonEggert: 添加选项设置标签关闭顺序 PR #66635
- Prabhanjan S Koushik (@skprabhanjan)
- Tereza Tomcova (@the-ress): 在 bootstrap.js 中正确处理 UNC 路径 PR #66128
- Tiago Ribeiro (@TiagoR98): 功能 #24344 已实现 PR #65072
- Tyler James Leonhardt (@TylerLeonhardt): 处理只有一个单引号但没有空格的边缘情况 PR #66359
- Alexander (@usernamehw)
- 为 Comparers 测试启用严格空检查 PR #65301
- 将对比度添加到检查 TM 小部件中 PR #64495
- 为 quickOpenScorer 测试启用严格空检查 PR #65299
- 将光标移动到括号内 PR #67164
- 排除/包含 commandsToSkipShell 而不是破坏用户设置文件 PR #66179
- 为 Notifications 测试启用严格空检查 PR #65291
- 为 snippetVariables 测试启用严格空检查 PR #65236
- 为 SplitView 测试启用严格空检查 PR #65307
- 在主题/图标主题过滤器后添加一个空格 PR #64745
- 为 GridView 测试启用严格空检查 PR #65305
- 当脏状态在顶部边框中突出显示时,完全隐藏标签关闭按钮 PR #64718
- Dipen Ved (@vedipen)
- @vemoo: 修复命名多行问题模式解析 PR #65840
- Vladimir Kotikov (@vladimir-kotikov): 添加选项在执行
git pull
之前自动存储更改 PR #59849 - Jeremy Shore (@w9jds): 修复 #57910 - 添加自动获取超时的设置 PR #59988
- Matthew Walinga (@walinga): 使用阶段行命令时,将空行的最后一行移除 PR #59974
- Yisrael Veller (@YisraelV)
对vscode-eslint
的贡献
- Jonathan T L Lee (@Lee182): Issue 529, 为 pnpm 添加支持 PR #572
- Loune Lam (@loune): disable-eslint 修复和改进 PR #588
对 language-server-protocol
的贡献
- Laurent Tréguier (@LaurentTreguier): 删除重复的 label 属性 PR #638
- Jason Axelson (@axelson): 修复变更日志链接 PR #654
对 vscode-languageserver-node
的贡献
- Daniel McNab (@DJMcNab):
- Felix Becker (@felixfbecker): 在 package.json 中添加 repository.directory 字段 PR #439
- Laurent Tréguier (@LaurentTreguier): 修复配置不总是使用资源范围的问题 PR #446
- Aleksey Kladov (@matklad): 在自述文件中提及
npm run symlink
PR #452
对 debug-adapter-protocol
的贡献
- Ben Jackson (@puremourning): 将 vimspector 添加到实现列表 PR #21
- Sean Allred (@vermiculus): 修正概述中的各种拼写错误 PR #22
对 vscode-vsce
的贡献
- Alexander (@usernamehw): 在控制台消息中添加颜色 PR #324
对 vscode-json-languageservice
的贡献
对 vscode-css-languageservice
的贡献
- Krister Kari (@kristerkari): 不要对 :export 块中的未知属性发出警告 PR #137
- Simon Chan (@yume-chan)
- Matthew Dean: 支持 Less 根函数、查找和匿名 mixin PR #135
对 vscode-html-languageservice
的贡献
- Liam Newman (@bitwiseman): 更新到 1.9.0-beta1 PR #43
对 vscode-generator-code
的贡献
- Aurélien Pupier (@apupier): 遵循 markdownLint 指南进行换行 #154 PR #155
对 vscode-recipes
的贡献
- Alan Agius (@alan-agius4): 文档: 更新 ng test 命令 PR #179
- Bryan Chapel (@bryanchapel): 更新 README.md PR #176
- @CannibalKush: 对 angular flow 进行修改 PR #177
- zhan ishzhanov (@janat08): 为 JEST 食谱拆分参数 PR #174
对 localization
的贡献
有超过 600 位 云 + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (MLCP),其中约 100 位活跃贡献者参与 Visual Studio Code。
感谢您通过提供新翻译、投票翻译或建议流程改进的方式做出贡献。
以下是 贡献者 的快照。有关项目详细信息,包括贡献者姓名列表,请访问项目网站 https://aka.ms/vscodeloc。
- 保加利亚语: Любомир Василев.
- 捷克语: Samuel Tulach.
- 丹麦语: Johan Fagerberg.
- 荷兰语: Jos Verlinde, Eric Algera.
- 芬兰语: Petri Niinimäki, Valtteri Vatanen.
- 法语: Mohamed Sahbi, Thomas Gouthière.
- 德语: Frank Lindecke, Hans Meiser, Jakob von der Haar, Sebastian Seidl.
- 希伯来语: Kyle Orin.
- 印地语: Satish Yadav, nirav adatiya, shaswat rungta, Dhanvi Kapila.
- 匈牙利语: Péter Nagy.
- 简体中文: 福永 叶, Xiangrui Kong, Licheng Ren, Young Bige, 文 陈, Y F, 彦佐 刘, 九鼎 谭.
- 印度尼西亚语: Azhe Kun.
- 意大利语: Michael Longo.
- 日语: nh, Masakazu TENMYO, 裕子 知念.
- 韩语: SeungJin Jeong.
- 挪威语: Stephan Eriksen.
- 波兰语: grzegorz m, Jakub Jedryszek.
- 葡萄牙语(巴西): Bruno Talanski, Alan Willian, Letticia Nicoli, Alessandro Fragnani, Cynthia Zanoni.
- 葡萄牙语(葡萄牙): Vitor Barbosa.
- 西班牙语: Engel Aguilar, José María Aguilar, julian3xl, Alvaro Enrique Ruano, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta.
- 泰米尔语: Mani M.
- 土耳其语: Muhammed Emin TİFTİKÇİ.
- 乌克兰语: Did Kokos.
- 越南语: Việt Anh Nguyễn.