VS Code 1.59 发布! Terminal 可以跨窗口移动了!

2021-08-06 08:18:10 +08:00
 formulahendry

原文链接: https://zhuanlan.zhihu.com/p/396681297

欢迎使用 2021 年 7 月版的 Visual Studio Code 。希望你会喜欢此版本中的许多更新与改进,以下是其中的一些高亮:

如果您想在线阅读这些发行说明,请访问 code.visualstudio.com上的更新

更多关于 VS Code 的资料请访问微软 MS Learn 平台:http://aka.ms/vscodelearn

内部抢先版 :想更先一步体验新功能吗?您可以下载每晚的 Insiders 版本,并在最新更新可用时立即试用。

工作台

扩展插件

改进了调整大小后的扩展视图。在下面的动图中,你可以看到默认宽度的扩展视图显示了所有详细信息(以前未显示图标、评分和安装计数)。当它缩小时,会显示较小的扩展图标,当其宽度进一步减小时,图标和评分将被隐藏。

扩展视图现在会显示自定义悬停信息。这个丰富的悬停包括扩展的完整描述和其他有用的信息,例如为什么禁用或推荐扩展。

您现在可以在插件面板中看到更多的插件运行状态,例如其激活时间、是否在启动时激活,以及扩展编辑器中新引入的 运行时状态 选项卡中是否生成了任何警告或错误。当然,你也可以悬停在插件试图上看到部分的运行状态信息。

插件面板的详细信息标签页现在会显示分类信息,资源链接,和诸如插件发布时间和更新时间的其他信息。选择某个分类会显示当前分类下的所有插件。

设置编辑器

设置编辑器现在支持对象验证功能。验证会涵盖直接编辑 JSON 文件时可能引入的类型错误。

非编辑模式下,数组设置现在具有了拖放功能的支持。

此外,将 uniqueItems 属性设置为 true 的枚举数组设置现在仅显示剩余选项,而不是下拉列表中的所有选项。

设置编辑器现在还支持多行字符串设置,其中值呈现在多行文本区域而不是单行输入框中:

扩展的主题自定义语法

颜色自定义设置允许用户自定义当前主题的颜色: - workbench.colorCustomizationseditor.tokenColorCustomizationseditor.semanticTokenColorCustomizations

以下语法可以用来一次自定义多个主题的颜色:

"workbench.colorCustomizations": {
        "[Abyss][Red]": {
            "activityBar.background": "#ff0000"
        },
        "[Monokai*]": {
            "activityBar.background": "#ff0000"
        }
    },

您可以列出多个主题,或者,在名称的开头或者结尾使用*通配符来选取多个主题。

Jupyter 笔记本文件的支持

本月,我们把支援 *.ipynb 文件的代码从 Jupyter 笔记本 插件吸收为了内建插件。这意味着你现在可以在一个全新安装的 VS Code 环境中得到 Jupyter 笔记本的原生支持。你甚至都不用安装 Jupyter 的插件。需要注意的是,如果你想要执行 ipywidgets 或者其他复杂渲染类型的代码单元或者查看运行结果时,你依然需要完整安装 Jupyter 插件。

笔记本布局的改进

我们在本次迭代中对笔记本布局进行了一些改进:

最后,您现在可以使用 notebook.globalToolbarShowLabel 设置在笔记本工具栏上切换文本标签:

"复制相对路径" 配置路径分隔符

在调用 "复制相关路径" 操作时,新设置 explorer.copyRelativePathSeparator 允许显式设置使用路径分隔符。以下为可用选项:

跨编辑器组共享视图状态

添加了一个新设置 workbench.editor.sharedViewState 以配置编辑器视图状态(例如,编辑器中的滚动位置)在编辑器组之间共享的方式。

默认情况下,此设置被禁用以保留当前设置。如果您在靠边打开编辑器并稍后关闭该编辑器组,只是为了再次打开编辑器到靠边,则不会恢复视图状态,因为您正在打开一个新的编辑器组。但是,当您启用此设置时,除非为编辑器组找到更具体的视图状态,否则将在所有编辑器组中保留并使用最新的编辑器视图状态。

编辑器

在不同的折叠范围之间切换

以下的新指令可以将光标位置设置为相应的折叠:

这些命令目前没有默认键绑定,但是你可以通过以下方法添加自己的键盘快捷键: 首选项:打开键盘快捷键(kb(workbench.action.openGlobalKeybindings))

自动折叠 Import 语句

通过设置 editor.foldingImportsByDefault 来自动折叠 Import 语句。 当文件被打开后,折叠的状态将会被保存。

TypeScript,JavaScript,Java,C#,C++ 和其他具备折叠范围提供程序的编程语言都支持这项新功能。注:折叠范围提供程序特指将 Import 语句标注为 FoldingRangeKind.Imports 的提供程序。

选择项的种子搜索字符串

Find Widget 设置 editor.find.seedSearchStringFromSelection 已支持从非空选择中播种搜索字符串。默认情况下,当显示小部件时,编辑器将使用以下两项作为搜索关键词:

  1. 选择项。
  2. 空选择周围的单词。

内联建议的改进

我们改变了内联建议的呈现方式。这不仅修复了许多错误,而且还使自动换行识别了内联建议。

此外,现在支持了非尾随位置的多行内联建议。

嵌入提示的改进

我们还改变了嵌入提示的呈现方式。通过使用与内联建议相同的机制,嵌入提示现在也被用于自动换行。

这种机制还实现了嵌入提示周围的单独光标停靠。

终端

在窗口之间拖拽终端

现在,您可以任意地从标签页或一个窗口的编辑区域,拖拽终端到标签页,编辑区域,或者另一个窗口的面板。

子进程跟踪和关闭警告

当用户尝试关闭一个有子进程的终端时,terminal.integrated.confirmOnExit 和新的设置 terminal.integrated.confirmOnKill会警告用户。默认情况下,这仅影响编辑器区域中的终端,但用户可以配置为显示所有的(面板区域中)终端警告。

设置所提供的终端配置文件为默认

现在用户可以将插件所提供的终端配置文件设为默认的配置文件。

下划线和删除线支持

终端现在支持下划线和删除线属性。例如,用可以可以配置git来使用这些新属性:

上述的例子使用了下列 .gitconfig 参数:

[color "status"]
  added = green bold
  changed = red bold strike
  untracked = cyan
  branch = yellow black bold ul

编辑区域靠边创建终端

现在,用户可以在活动编辑区域使用新指令workbench.action.createTerminalEditorSide 来创建一个靠边新的终端。

活动终端标签页指示器

主题现在可以使用主题键terminal.tab.activeBorder设置垂直线的颜色,用以指示活动的终端选项卡。

如果没有设置 terminal.tab.activeBorder,颜色将回退到tab.activeBorder

禁用终端标签页动画图标

terminal.integrated.tabs.enableAnimation会禁用终端标签页动画图标。如果是针对任务而不是微调器,播放按钮会被使用:

调试

改进了编辑器标题区域内的 播放 /调试 按键

2 月的版本中,我们引入了一个下拉按钮,用以在编辑器标题区域的中央(紧凑)位置对运行和调试命令进行分组。根据一些用户反馈,我们尝试通过记忆上次执行的操作来改进下拉按钮。下拉按钮现在将会拥有两个单击区域,一个用于默认动作(左),另一个用于下拉(右),其中,所选运行操作将被记忆并存为新的默认值。

请注意:

对扩展插件的贡献

实时预览

实时预览扩展插件本月出现了一些令人兴奋的新功能!这包括:

要查看有关本月进度的更多详细信息,请参阅扩展的发行说明

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展插件的工作仍在继续,它允许您响应、创建和管理拉取请求和问题。本月重点对问题的 "开始工作" 进行了扩展,让您可以处理当前打开的存储库之外的问题。

要了解所有新功能和更新,您可以查看 0.29.0 版扩展的完整变更日志

Jupyter

Jupyter扩展插件的工作仍在继续。要了解所有的新功能和更新,您可以查看 7 月版本的完整更新日志

互动窗口

Jupyter 交互窗口提供了另一种构建和使用 Jupyter 笔记本的方法,使用文本文件而不是笔记本界面。上个月,我们预览了 Jupyter 交互式窗口的升级版本,现在我们提供了具有更深入的工作台集成,包括对主题的支持、自定义键绑定、片段、与扩展的兼容性等!非常感谢我们的用户通过 GitHub 问题提供有关预览体验版的反馈。内置交互窗口现在已经成为了 1.59 版本中的默认界面。之前的界面在 "jupyter.enableNativeInteractiveWindow": false后将仍然可用,并会在即将发布的版本中删除。我们期待您的反馈

逐行运行

我们一直致力于支持 Jupyter 笔记本中的 "逐行运行" 功能。此功能本质上是一种简化的调试模式,可让您逐行执行单元代码,而无需任何复杂的调试 UI 。这依然是实验性的,您可以通过设置 "jupyter.experimental.debugging": true,在您选择的内核中安装 ipykernel 的第 6 版,然后选择单元格工具栏中的 " 按行运行" 按钮来尝鲜一下。

远程容器 devcontainer CLI

远程- 容器 扩展适用于在 VS Code 中使用 Docker 容器。它现在包含 devcontainer 命令行界面,让您可以轻松地打开容器中的文件夹 ( devcontainer open ) 或者构建开发容器映像 ( devcontainer build )。

您可以在 远程开发 发行说明中了解新的功能和错误修复。

预览功能

无标题文件的自动语言检测

我们很高兴地宣布无标题文件的自动语言检测的初始预览版,它使用机器学习来检测您正在编码的语言并自动设置无标题文件的语言模式。此功能利用了开源 ML 库 Tensorflow.js 和 GitHub 用户 @yoeo 来自 Guesslang 的 ML 模型。

在此版本中,该功能将默认关闭,但我们计划将其设为下一次迭代版本的默认设置。如果您想要启用它,请应用以下设置:

"workbench.editor.untitled.experimentalLanguageDetection": true

举个例子,您可以打开一个无标题文件并将一段代码粘贴到您的编辑器中。

以下是一段自动识别的 Python 代码段:

此外,您可以通过打开语言选择器查看正在检测的语言。

注意:如果语言检测结果不够确信,那么您将保持当前的语言模式,语言选择器中不会显示任何结果,直到语言检测结果更有把握。

该设置还允许您提供语言覆盖,可用于指定您不想自动关闭的语言模式。 以下的例子展示了如何关闭 .md 文件自动检测:

"workbench.editor.untitled.experimentalLanguageDetection": true
"[markdown]": { "workbench.editor.untitled.experimentalLanguageDetection": false }

在您编辑无标题的 Markdown 文件时,自动语言检测功能不会运行。但是,如果您正在修改任何其他类型的无标题文件,自动语言检测功能会检测这些文件的内容。

我们已经将与 ML 模型交互的代码分离并合并到它自己的代码库中,作为 npm 包发布,该包存在于 vscode-languagedetection存储库中。

请让我们知道无标题文件的自动语言检测功能是否帮助到了您的日常工作!

TypeScript 4.4

此版本包括对 TypeScript 4.4 版本的支持。您可以在 TypeScript 博客上阅读有关 TypeScript 4.4 中新语言功能和改进的更多信息。一些工具亮点:

要开始使用 TypeScript 4.4 内测版本,请安装 TypeScript Nightly 扩展

如果您在使用 TypeScript 4.4 时遇到任何错误,请分享您的反馈并告诉我们。

反汇编视图

感谢微软 C++ 团队贡献的大量代码,我们很高兴在这个里程碑版本中包括了 反汇编视图 的预览功能。

反汇编视图可以从编辑器的上下文菜单中打开,用以显示活动堆栈帧的反汇编源码,它支持单步执行汇编指令,并且可以在单个指令上设置断点。

反汇编视图仅在活动的调试会话中可用。注意,底层调试扩展插件也需要有相应的支持。

目前,只有 C++Mock Debug可以支持反汇编视图。

从技术角度而言,VS Code 的反汇编视图实现了 DAP (Debug Adapter Protocol) 协议另外四个功能:

扩展创作

测试 API

去年秋天,我们开始在 VS Code 中添加对运行测试的原生支持,本月,第一组与测试相关的 API 已经交付。与之前的扩展插件相比,这些 API 提供了更大的灵活性、更好的性能和更丰富的用户体验。查看有关编写测试扩展的指南以深入了解。

测试资源管理器 UI 插件的现有用户可以通过将 testExplorer.useNativeTesting设置为true来获得原生体验。但是,该转换是基于测试资源管理器 UI 扩展现有 API,因此不包括诸如丰富差异之类的一些功能。

Java 扩展包中包含的 Microsoft Java 测试运行器是最早采用测试 API 的扩展之一 。

新建文件菜单的贡献点

有助于创建新文件编辑器的扩展(例如笔记本或自定义编辑器)现在可以向新的 文件 /新文件 菜单贡献点贡献命令。可以从欢迎页面或文件菜单中的 "新建文件..." 项目访问此菜单。

丰富状态栏悬停

状态栏项目现在支持丰富的悬停,包括链接和图标 StatusBarItem.tooltip: string | IMarkdownString

状态栏警告颜色

表示警告的状态栏项目可以使用新添加的颜色 statusBarItem.warningBackgroundstatusBarItem.warningForeground

没有 additionalProperties 的对象设置

对象设置必须将 additionalProperties 设置为 false ,以便在设置编辑器中支持对象。否则,设置编辑器会解读为复杂设置(不规律的设置),并将用户定向到设置 JSON 文件。

多行字符串设置

要在设置编辑器中添加多行字符串设置的支持,请将 "editPresentation": "multilineText"作为键值配对添加到字符串设置中。将字符串设置更改为多行设置将导致设置编辑器在多行文本区域(而非单行输入框中)呈现设置值。

更新的 Codicons

我们已经添加了下列新图标到 codicon库中:

文本文档更改原因

当事件 workspace.onDidChangeTextDocument被触发时,事件对象的新属性reason 会告知用户文本更改的原因是撤消或重做操作。

语言服务器协议

语言服务器协议的下一个新版本以及对应的 npm 模块已经发布。3.17 版本包含了一个关于完成项标签详细信息的新提案,该提案符合 VS Code 本身的最新变化。

调试适配器协议

最终确定 " writeMemory" 请求和 " memory"事件提案

writeMemory请求已经完成,现在可以在 Debug Adapter Protocol的 1.48 版和与之相对应的 npm 模块中使用。如果调试适配器具有 supportsWriteMemoryRequest功能,客户端可以使用 writeMemory请求将字节写入给定位置的内存。

memory事件有一个新的提案,将在下一个里程碑中添加到 DAP 。

提议的扩展插件 API

每个里程碑版本都附有新提议的 API,扩展插件的作者们可以试用它们。我们期待您的反馈。如果您想要尝鲜提议的新 API,请完成以下步骤:

您将不能使用建议 API 发布扩展插件。因为新的版本可能会有重大变化,我们需要保证现有的扩展插件可以被继续使用。

isDefault 用于 TaskGroup

group属性存在于tasks.json 文件中定义的任务上,也通过任务 API 公开。 group属性有一个 isDefault 属性,该属性直到现在在 API 中都不可用。该提案将isDefault 属性公开为TaskGroup上的只读属性,以便扩展可以读取哪个任务是组的默认任务,但不能通过为组设置默认值来覆盖用户配置。

用于 AuthenticationGetSessionOptions 的 forceRecreate

到目前为止,用于获取身份验证会话对象的getSession API 从来没有能力要求用户需要再次登录。然而这对于使用 SAML/单点登录 (SSO) 体验的 GitHub 等身份验证服务是必需的,其中访问令牌最终会在 SSO 会话到期时失去对资源的访问权限。该提案为 AuthenticationGetSessionOptions添加了另一个名为 forceRecreate的属性,允许您要求用户再次登录。向用户显示类似于您指定 createIfNone 时显示的模式体验。

工程

基于 iframe 的 webviews 现在在桌面上随处可见

本月我们完成了从 Electron 的 webview 标签元素过渡到基于普通 <iframe>元素的 webview 。这更好地协调了 VS Code 的 webviews 跨桌面和 web 的实现,也让我们删除了很多现在冗余的代码。

Electron 13 更新

在这个里程碑版本中,我们完成了将 Electron 13 捆绑到 VS Code 的实验,这要感谢所有参与 Insiders 测试和自托管的参与者。这是 Chromium 91.0.4472.124 附带的主要 Electron 版本。此版本的 Node.js 版本没有变化,它仍然是 v14.16.0 。

Electron 沙盒支持的进展

随着我们准备让 VS Code 工作台启用 Electron 的沙盒功能,我们希望在 linux 上启用混合沙盒模式,且不在分布式软件包 deb 、rpm 、snap 、tar 存档中捆绑 cli 参数--no-sandbox 。Chromium 在 linux 上有一个多层沙盒模型。如果 Chromium 无法将命名空间沙盒用于第 1 层,它将尝试通过帮助程序 chrome-sandbox来使用 setuid 沙盒。要使 setuid 二进制文件工作,它需要满足以下条件:

我们能够为 deb 和 rpm 包保留这些条件。目前无法获得 snap 的这些权限,我们有以下跟踪问题 https://github.com/microsoft/vscode/issues/127140

至于其他使用 tar 存档的应用程序,如果应用程序无法使用命名空间沙盒(这在容器内运行时可能会发生)它将失败并显示以下错误:

FATAL:setuid\_sandbox\_host.cc(158)] 

找到了 SUID 沙盒助手二进制文件,但没有正确配置。而不是在没有沙盒的情况下运行,我现在正在中止程序。您需要确保 chrome-sandbox 由 root 用户拥有并且模式为 4755 。

如果发生这种情况,您可以使用以下两个选项之一来使其正常工作:

sudo chown root <path-to-vscode>/chrome-sandbox
sudo chmod 4755 <path-to-vscode>/chrome-sandbox

烟雾测试的一些改进

我们一直为每个构建版本运行一套完整的烟雾测试。我们测试打开 VSCode (桌面和 Web )并执行一堆 UI 元素以确保正确的功能。这个里程碑版本中我们在这个基础上投入了更多资源,从而使我们能够从最终计划中移除手动的烟雾测试。

烟雾测试现在可以在所有平台( macOS 、Linux 和 Windows )上运行。最重要的是,我们已经实现在每次代码提交时自动运行烟雾测试,从而我们可以及时地发现 VS Code 新版本可能引入的软件错误。

最后,感谢我们用于自动化 Web 冒烟测试的 Playwright 库,我们采用了他们的跟踪工具,这使得我们可以查看并且重复运行失败的烟雾测试。

学习资料

http://aka.ms/vscodelearn

重大修复

7534 次点击
所在节点    Visual Studio Code
32 条回复
IgniteWhite
2021-08-06 08:25:13 +08:00
Jupyter 的话 JupyterLab 比较好用。VSCode 的 Jupyter 插件可以期待一下,这个使用文本文件编辑 notebook 的功能看起来有点像 jupytext,应该也是方便 VCS 了
LiuJiang
2021-08-06 08:57:57 +08:00
好,问题来了,.jsx 的文件,import 引入的函数或组件,如何按 ctrl + 鼠标左键或其他方式,跳到其声明位置? .tsx 可以,.jsx 我 Google 了很久,没有找到。
CodeCodeStudy
2021-08-06 09:10:09 +08:00
Vue 项目,根据网上教程装了扩展,依然没有办法使用 ctrl + 鼠标左键跳转至声明
anjianshi
2021-08-06 09:26:11 +08:00
@LiuJiang 引用的文件路径是普通的相对路径还是带 alias 的,例如这种 `@/src/index.jsx`
zzlit
2021-08-06 09:45:48 +08:00
我就想知道这个解决了没有 https://github.com/microsoft/vscode/issues/123056
zzlit
2021-08-06 09:47:42 +08:00
@LiuJiang 或者借用插件?例如`别名路径跳转`这种
yellowV2ex
2021-08-06 10:06:24 +08:00
然而依然不能把文件在新窗口打开
736531683
2021-08-06 10:07:57 +08:00
问一下,为什么 remote ssh 连接服务器没法用 intellicode 补全,本地可以,我看 issue 提了作者也没办法解决.有没有其他替代
calmWei
2021-08-06 10:26:28 +08:00
更新 1.58 以后,写 XML,属性冒号后面的智能提示没了,不知道有没有解决,现在只能强制降级到 1.57 了
fpure
2021-08-06 10:31:31 +08:00
1.59 把 Split JSON 设置编辑器的模糊搜索给砍掉了😡😡😡,微软砍刀部名不虚传👎👎👎
大家去 https://github.com/microsoft/vscode/issues/125952 下面点个👎吧
fpure
2021-08-06 10:35:54 +08:00
我又看了一下,Split JSON 设置编辑器不止砍掉了模糊搜索,还砍掉了快速复制设置项到自定义设置的铅笔图标😡😡😡,👴🤮了
fpure
2021-08-06 10:37:31 +08:00
做个人事吧,要砍去砍 GUI 不好吗,GUI 才是一个编辑器最大的技术债!
👍https://github.com/microsoft/vscode/issues/129594
azkaban
2021-08-06 11:03:37 +08:00
快进到以后只开 vscode 搞定一切开发
Akiya
2021-08-06 11:16:09 +08:00
快进到 vscode 成为新一代操作系统
XTTX
2021-08-06 12:07:06 +08:00
@LiuJiang 你按 f12
Smash
2021-08-06 13:34:22 +08:00
vscode 可能是我见过更新得最频繁的开发工具了...😂 , 好多新功能我基本上都没有用到过.
kblacksheep
2021-08-06 17:00:17 +08:00
请教前端大佬们一个问题。我之前做自己项目的时候,前端用 vue 会经常无法跳转到定义的问题,按网上说的装插件也不好使,用的我很烦躁。。。后来换 webstorm 了就没有这个问题了,是我用的姿势不对还是 vsc 本身的问题?这个导致我后来很长一段时间不想打开 vsc🤣
kkocdko
2021-08-06 17:28:16 +08:00
@fpure 我想问下这是个什么功能? Google 了一圈也没弄明白
jingslunt
2021-08-06 17:30:06 +08:00
LiuJiang
2021-08-06 19:36:15 +08:00
@anjianshi 带 alias 的,普通相对路径,可以跳转

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX