2020 年 1 月(版本 1.42)
更新 1.42.1:此更新解决了这些 问题。
下载:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 Visual Studio Code 的 2020 年 1 月版本。此版本中有一些更新,我们希望您会喜欢,一些主要亮点包括
- 重命名预览 - 在差异视图中查看待处理的重命名,并轻松接受或拒绝更改。
- 打开编辑器限制 - 设置一次打开的编辑器的最大数量。
- 面板位置 - 将面板(输出、终端)移动到编辑器的左侧、右侧或下方。
- 折叠代码突出显示 - 使用新的背景突出显示快速查找折叠区域。
- 调试控制台改进 - 语法高亮、括号匹配、输入历史记录。
- 定义全局任务 - 每用户任务可以在所有文件夹和工作区中使用。
- Java 扩展更新 - Java 对数据断点和调用层次结构视图的支持。
- 远程开发 - 用于映射 SSH 和容器端口的新转发端口视图。
- 新的容器教程 - 了解如何创建和部署 Docker 容器。
- 预览功能 - 首次预览时间线视图、搜索编辑器、语义高亮等。
如果您想在线阅读这些发行说明,请访问 Updates on code.visualstudio.com。
内部人员:想尽快看到新功能?您可以下载夜间 内部人员 版本,并在新功能可用时立即尝试最新更新。如需了解最新的 Visual Studio Code 新闻、更新和内容,请关注我们的 Twitter @code!
工作台
重命名预览
Visual Studio Code 现在允许您预览重命名更改。重命名时,您可以通过 ⌘Enter(Windows、Linux Ctrl+Enter) 确认新名称并查看重构预览面板。它在差异编辑器中显示待处理的更改,并允许您取消选中/选中各个更改。应用重命名(或中止)后,差异编辑器和预览面板会关闭,将您带回当前编辑器。
主题:GitHub Sharp,字体:FiraCode
限制打开的编辑器的数量
有一些新的设置可以限制一次打开的编辑器的最大数量。
workbench.editor.limit.enabled
:启用此功能(默认情况下关闭)。workbench.editor.limit.perEditorGroup
:是否对每个编辑器组或所有组应用限制。workbench.editor.limit.value
:打开的编辑器的最大数量(默认情况下为 10)。
如果启用,VS Code 将在您打开新编辑器时关闭最近最少使用的编辑器。
下面您可以看到限制设置为 3 时的行为
主题:Nord
注意:未保存的编辑器(包含未保存更改的文件)永远不会自动关闭,但仍然计入打开的编辑器的总数。
未命名编辑器改进
VS Code 中的未命名编辑器是尚未保存到磁盘的文本缓冲区。您可以随意打开它们,所有文本内容都将在重启之间存储和恢复。
未命名编辑器标题
过去,未命名编辑器被赋予通用的名称,例如Untitled-1
,并向上计数。在此版本中,未命名编辑器将使用文档第一行的内容作为编辑器标题,并将通用名称作为描述
主题:Nord
注意:如果第一行为空或不包含任何单词,则标题将回退到Untitled-*
,如以前一样。
默认语言模式
默认情况下,未命名文件没有配置特定的语言模式。VS Code 具有一个设置files.defaultLanguage
,用于为未命名文件配置默认语言。在本版本中,该设置可以采用一个新值{activeEditorLanguage}
,该值将动态使用当前活动编辑器的语言模式,而不是固定默认值。
此外,当您将文本复制粘贴到未命名编辑器中时,VS Code 现在将自动更改未命名编辑器的语言模式,如果文本是从 VS Code 编辑器中复制的
主题:One Dark Pro
注意:如果未命名编辑器已经指定了语言模式,则粘贴文本不会更改它。
导航最近使用的编辑器
在此版本中,现在有一个所有编辑器组中最最近使用的 (MRU) 编辑器列表。当编辑器作为活动编辑器打开或成为已打开的新的活动编辑器时,它被视为最近使用。关闭编辑器后,它将从此列表中删除。
此列表的一个应用是新的edt mru
选择器,您可以通过新的视图:按最近使用显示所有编辑器(workbench.action.showAllEditorsByMostRecentlyUsed
)命令打开它
您可以添加键盘快捷键以快速在选择器中导航,而无需使用鼠标。例如,下面是一个按键绑定,以便 Ctrl+Tab 和 Ctrl+Shift+Tab 在所有组的编辑器之间导航(而不是像默认按键绑定那样仅在活动组内导航)
[
{
"key": "ctrl+tab",
"command": "workbench.action.quickOpenPreviousRecentlyUsedEditor",
"when": "!inEditorsPicker"
},
{
"key": "ctrl+shift+tab",
"command": "workbench.action.quickOpenLeastRecentlyUsedEditor",
"when": "!inEditorsPicker"
}
]
如果您想在不使用选择器的情况下导航列表,则有一些新的命令
- 视图:打开下一个最近使用的编辑器(
workbench.action.openNextRecentlyUsedEditor
) - 视图:打开上一个最近使用的编辑器(
workbench.action.openPreviousRecentlyUsedEditor
)
为了区分哪些编辑器导航命令使用选择器,哪些不使用选择器,一些现有命令的行为已更改。具体来说,组中的最近使用的编辑器命令不再使用选择器
- 视图:打开组中的下一个最近使用的编辑器(
workbench.action.openNextRecentlyUsedEditorInGroup
) - 视图:打开组中的上一个最近使用的编辑器(
workbench.action.openPreviousRecentlyUsedEditorInGroup
)
对于基于选择器的导航,请使用
- 视图:快速打开组中的上一个最近使用的编辑器(
workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup
) - 视图:快速打开组中最少使用的编辑器(
workbench.action.quickOpenLeastRecentlyUsedEditorInGroup
)
移动面板
面板包含输出、调试控制台、终端和问题窗格,现在可以移动到编辑器的左侧。
视图:切换面板位置(workbench.action.togglePanelPosition
)命令已删除,取而代之的是以下新命令
- 视图:将面板移动到左侧(
workbench.action.positionPanelLeft
) - 视图:将面板移动到右侧(
workbench.action.positionPanelRight
) - 视图:将面板移动到底部(
workbench.action.positionPanelBottom
)
重启时恢复所有窗口
VS Code 的设置已更改为默认情况下在启动时恢复所有窗口。如果您想恢复到以前的行为,请配置"window.restoreWindows": "one"
以仅打开一个窗口。
保存冲突解决
VS Code 具有一个内置机制,当您尝试保存一个已在 VS Code 外部或其他程序(例如 Git)中更改的脏文件时,会显示一个通知
其目的是通知您,保存将覆盖磁盘上的内容,即使文件在文件变脏后发生了更改。选择比较按钮,您可以查看您的更改以及磁盘上的版本,然后覆盖或还原文件。
如果您知道磁盘上的更改可以被覆盖,现在通知中有一个直接的覆盖按钮。您还可以全局配置files.saveConflictResolution
、按工作区或文件类型配置,以完全禁用此行为。选项包括askUser
(默认)或overwriteFileOnDisk
。
处理缓慢的保存操作
VS Code 允许扩展在将文件保存到磁盘时更改文件的內容。保存时格式化和保存时修复等功能就是例子。但是,保存是一个关键操作,扩展在保存过程中进行的处理必须尽快完成,以便实际保存操作可以继续进行。“快速”以前是由 VS Code 强制执行的,其中 VS Code 会在超时后取消扩展保存操作。该强制执行保证了快速的保存,但可能令人沮丧,因为有时预期的处理不会发生。
在此版本中,我们放弃了基于超时的方案,而是显示一个进度通知,允许您取消参与保存的扩展(“保存参与者”)。通知让您知道保存操作正在运行,您可以决定是等待保存参与者完成还是不等待。
主题:Light+
源代码管理输入
源代码管理视图中的输入框现在使用 Monaco 编辑器。Monaco 编辑器支持多光标和移动/复制行命令等有用功能。
多根目录资源管理器中的两步折叠
当您使用 多根目录工作区 时,文件资源管理器中的折叠文件夹按钮现在具有两步行为。第一次点击将折叠每个顶级目录中的所有文件夹,第二次点击将折叠顶级目录。搜索视图已经具有此行为。
主题:Monokai
根据操作系统颜色方案自动切换主题
Windows 和 macOS 现在支持浅色和深色颜色方案。有一个新的设置,window.autoDetectColorScheme
,它指示 VS Code 监听操作系统颜色方案的变化,并相应地切换到匹配的主题。
要自定义颜色方案更改时使用的主题,可以使用以下设置来设置首选的浅色和深色主题:
workbench.preferredLightColorTheme
workbench.preferredDarkColorTheme
编辑器
控制 Peek 视图焦点
有一个新的设置和命令来控制 Peek 视图最初将焦点放在哪里。默认情况下,Peek 会将焦点放在右侧的树上,以便您可以快速导航到引用。对于那些想要使用 Peek 在编辑器中进行快速代码更改的人来说,树上的初始焦点并不是最好的选择。现在可以使用 editor.peekWidgetDefaultFocus
设置来定义您的偏好,该设置可以设置为 editor
或 tree
。还有一个新的命令 togglePeekWidgetFocus
(⌘K F2 (Windows, Linux Ctrl+K F2)),它允许您在 Peek 编辑器和树之间移动焦点。
折叠区域高亮
现在,通过添加背景高亮,折叠的代码区域更容易发现。
主题:Dark+
该功能由设置 editor.foldingHighlight
控制,颜色可以使用颜色 editor.foldBackground
自定义。
"workbench.colorCustomizations": {
"editor.foldBackground": "#355000"
}
折叠改进
在折叠指示器上单击 Shift + Click
一次,首先折叠内部范围。再次单击 Shift + Click
(当所有内部范围已折叠时)将折叠父级。再次单击 Shift + Click
将展开所有范围。
使用 **Fold** 命令 (⌥⌘[ (Windows, Linux Ctrl+Shift+[)) 在已折叠的范围内,将折叠下一个未折叠的父级范围。
新的换行选项
默认情况下,编辑器在计算单词换行符时假设所有字符的宽度相同。这种假设允许默认算法速度很快,但在使用非等宽字体或编写字符宽度不同的脚本文本时,其结果很差。有一个新的设置,editor.wrappingStrategy
,可以设置为 advanced
,使编辑器将单词换行符计算委托给浏览器。
辅助功能
建议小部件改进
建议小部件现在不再使用 ARIA 警告,并正确地向屏幕阅读器指示它已获得焦点。这应该可以防止屏幕阅读器意外地妨碍操作。
检测到屏幕阅读器时,editor.accessibilityPageSize 设置为 160
editor.accessibilityPageSize
设置控制屏幕阅读器一次可以读出的编辑器中的行数。但是,使用较大的值会影响性能。当我们检测到屏幕阅读器时,我们决定自动将该值设置为 160 行(由于 NVDA 错误,不会更多)。
Linux 与 Orca 的无障碍功能
我们已经开始研究如何在 Linux 上使用 Orca 屏幕阅读器使 VS Code 变得无障碍。但是,由于这项工作需要 Electron 7,我们预计将在下一个稳定版本中取得更多进展。在此期间,对于 Linux 的无障碍功能,您可以使用我们的 Insiders 版本并提供反馈。
集成终端
滚动灵敏度
终端的滚动灵敏度现在可以使用新的设置独立于编辑器进行配置:
terminal.integrated.mouseWheelScrollSensitivity
- 鼠标滚轮滚动倍数(默认值为 1)。terminal.integrated.fastScrollSensitivity
- 按下 Alt 时的快速滚动倍数(默认值为 5)。
调试
简化的初始调试视图
为了简化调试视图的开始,VS Code 现在只显示一个 **Run and Debug** 按钮。**Run Without Debugging** 操作(并非所有调试器都支持)仍然在调试主菜单中可用。
根据用户反馈,如果设置了至少一个断点,则断点窗格将显示在起始视图中。
调试控制台改进
调试控制台输入
调试控制台输入现在使用当前活动编辑器的语言模式。这意味着调试控制台输入支持语法着色、缩进、引号自动关闭以及其他语言功能。
输入/输出呈现
我们已经调整了调试控制台中输入和输出的呈现方式,使其更易于区分。VS Code 只在输入表达式旁边显示一个箭头。
调试控制台输入历史建议
调试控制台输入框现在会自动建议之前输入的条目。文本图标用于区分历史建议和其他 IntelliSense 条目。
调试结束后隐藏调试控制台
有一个新的设置 debug.console.closeOnEnd
,用于控制调试停止后调试控制台是否应自动关闭。
支持 console.table(...)
调试控制台现在可以显示来自 Node.js console.table(...)
API 的输出。
已加载脚本视图改进
已加载脚本视图已更新为使用 VS Code 的新树视图。它现在以与 VS Code 的文件资源管理器相同的紧凑形式呈现单个子文件夹。此外,现在可以边输入边搜索和展开树
我们计划在下一个版本中删除 **Debug: Open Loaded Scripts** 命令,因为它重复了树的“边输入边搜索和展开”功能。
启动配置排序和分组
启动配置和复合体现在支持一个新的结构化属性 presentation
。使用 order
、group
和 hidden
属性,您可以对调试配置下拉菜单和调试快速选择中的配置和复合体进行排序、分组和隐藏。
例如,launch.json
中的启动配置可以具有以下 presentation
字段
"presentation": {
"group": "5_tests",
"order": 10,
"hidden": false
}
例如,我们已向一些 VS Code 自身的启动配置添加了呈现方式,以便以更有意义的方式对它们进行分组,并隐藏那些仅作为复合启动配置一部分的配置。
调试活动栏图标和装饰
根据用户反馈,我们已更新了活动栏中的调试图标,使其更好地代表 **Run and Debug**。在调试时,调试图标上有一个数字装饰,用于显示活动调试会话的数量。
任务
用户级任务
现在,在用户设置级别支持在 tasks.json
中声明的任务。如果您有一个在多个项目中使用的构建脚本,或者您不希望将任务放在项目文件夹中,则可以将任务添加到用户 tasks.json
文件中。运行 **Tasks: Open User Tasks** 命令以创建用户级任务,这些任务将在所有文件夹和工作区中可用。这里只支持 shell
和 process
任务类型。
输入 pickString 标签
如果您使用任务 inputs
,则可以为 pickString
输入 options
添加一个友好的标签
"inputs": [
{
"id": "pickAnInputValue",
"description": "Pick a Value",
"type": "pickString",
"options": [
"first-value",
{
"label": "Second Value",
"value": "second-long-value-that-can-be-simplified-for-display"
}
],
"default": "first-value"
}
]
标签将显示为
语言
TypeScript 3.7.5
我们已将捆绑的 TypeScript 版本更新为 3.7.5。此次小幅更新包含一些重要的错误修复,包括修复了在 Windows 上未存储在 C 盘上的项目的 IntelliSense。
默认情况下关闭 HTML 镜像光标
HTML 镜像光标 现在是一个选择加入的功能。在即将发布的迭代中,我们将继续 改进其实现,使此功能更容易理解,并使更多语言可以使用。您仍然可以通过打开 html.mirrorCursorOnMatchingTag
来使用此功能。
预览功能
预览功能尚未准备好发布,但功能已足够强大,可以供您使用。欢迎您在开发过程中提供早期反馈。
时间轴视图
在这个里程碑中,我们在新的时间轴视图方面取得了进展,并已提供一个早期预览。这是一个统一的视图,用于可视化资源(文件、文件夹)的时间序列事件(例如,Git 提交、文件保存、测试运行等)。若要启用时间轴视图,您必须使用 Insiders 版本,然后添加以下设置
"timeline.showView": true
您可以在下面看到时间轴视图显示文件的 Git 提交历史记录
在这个早期预览中,时间轴视图显示了活动文档的 Git 提交历史记录,目前仅限于 32 个项目。选择其中一个提交将打开该提交引入的更改的差异视图。扩展程序还可以 贡献他们自己的时间轴源,这些源将在统一的时间轴视图中显示。最终,您还将能够选择(筛选)要显示在视图中的源。
敬请期待,我们还有更多关于此新功能的计划。您可以通过订阅 问题 #84297 并关注带有 'timeline' 标签的问题来关注进展情况。如果您对您想在此视图中看到的其他类型的信息有任何想法,请告诉我们!
搜索编辑器
我们继续开发我们的新搜索编辑器,目标是使搜索编辑器成为本迭代的主要搜索体验。为此,我们实现了用于配置搜索编辑器查询的 UI
主题:Noctis Lilac,字体:Hasklig
现在有几个用于搜索编辑器的命令,您可以将它们绑定到您选择的键盘快捷键
search.action.openNewEditor
:在活动编辑器组中打开一个新的搜索编辑器。search.action.openInEditor
:将当前搜索结果复制到新的搜索编辑器中。
有关搜索编辑器的更多信息和更新,请参阅 问题 #23931。
注意: 搜索编辑器在 Insiders 中默认启用,并且可以通过将 search.enableSearchEditorPreview
设置为 true
在稳定版中选择加入。
TypeScript 和 JavaScript 的语义高亮
TypeScript 和 JavaScript 的语义高亮支持正在开发中,尚未默认启用。您可以通过添加以下设置来试用它
"editor.semanticHighlighting.enabled": true
启用后,您将看到一些标识符具有新的颜色和样式,并且现在根据它们解析的类型进行高亮显示。默认语法(TextMate)高亮程序将许多标记归类为 variables
,现在这些标记已解析为命名空间、类、参数等。
您可以在导入部分看到这一点,其中现在每个导入的符号都用符号的类型着色
您可以使用 **Developer: Inspect Editor Tokens and Scopes** 命令来检查为每个位置计算的语义和语法标记。
新的 JavaScript 调试器
我们一直在开发一个用于 Node.js 和 Chrome 的新调试器。它默认安装在 Insiders 上,并且可以在 VS Code Stable 中从 市场 安装。您可以通过启用 debug.javascript.usePreview
设置,使用现有启动配置开始使用它。以下是本月添加的一些新功能。
新的 JS 调试器将自动调试您在新 JavaScript 调试终端中运行的命令,您可以通过 **Debug: Create JavaScript Debug Terminal** 命令打开该终端
主题:Earthsong,字体:Fira Code
新的调试器还在您的 package.json 的 scripts
部分中提供了一个 **Debug** CodeLens,它可以运行和调试脚本,无需额外配置
您可以通过 debug.javascript.codelens.npmScripts
设置配置 CodeLens 的可见性和位置(顶部或内联)。
试试吧!如果您在使用新调试器时遇到任何问题,可以在 vscode-js-debug 库中提交问题。
将视图从侧边栏移动到面板
我们正在积极努力,让自定义 VS Code 布局变得更加容易。您可以使用以下设置测试进度
"workbench.view.experimental.allowMovingToNewContainer": true
启用此设置后,一些视图将具有一个新的上下文菜单项,用于在侧边栏和面板之间移动它们。目前,此设置仅影响资源管理器中的大纲视图和扩展贡献的视图。您也不能像在侧边栏中那样将这些视图组合到面板中。
主题:LaserWave,字体:Cascadia Code
这只是功能的预览,其中许多方面可能会发生变化,包括上面提到的限制。欢迎您在我们的 内部版本 中查看进一步的进展。
关于搜索的说明:使用新的通用视图移动方法,旧的搜索视图设置 search.location
和命令 搜索:切换搜索视图位置 (search.action.toggleSearchViewPosition
) 已被弃用。您的设置应该会自动迁移,但您需要使用新的通用方法才能在将来移动搜索视图。您无需启用上述实验性预览设置即可使用新的上下文菜单项移动搜索视图。
TypeScript 3.8 beta 支持
尽管 VS Code 不会在下一个月正式发布之前捆绑 TypeScript 3.8,但在此迭代中,我们添加了对所有 激动人心的新 TypeScript 3.8 beta 功能 的支持。
这些包括
- 对 JavaScript 和 TypeScript 文件中的 私有字段 进行 IntelliSense 和语法高亮显示。
- 对 JavaScript 和 TypeScript 的调用层次结构支持。
- 将代码转换为模板字符串的重构功能!
您可以通过安装 TypeScript 夜间版扩展,立即轻松试用所有这些新 TypeScript 3.8 功能。请分享您的反馈,并告知我们您在使用 TypeScript 3.8 beta 时遇到的任何错误!
对扩展的贡献
Java 调试器支持数据断点
Java 调试器 扩展现在支持 VS Code 1.38 中引入的 数据断点。此功能允许您创建当变量的值发生更改时会命中的断点。
您可以在下面看到调试器在 Owner.telephone
字符串更改时中断
Java 调用层次结构视图
Java 语言支持 扩展现在支持 调用层次结构 视图,该视图显示对函数的所有调用或来自函数的所有调用,并允许您深入了解调用者的调用者和调用的调用者。
右键单击一个符号,然后选择 Peek > Peek Call Hierarchy 以查看调用层次结构
远程开发
远程开发扩展 的工作仍在继续,这些扩展允许您使用容器、远程计算机或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.42 中的功能亮点包括
- 远程 - SSH:改进对 Windows 服务器的支持,包括自动操作系统检测。
- WSL:支持 在资源管理器中显示 以打开 Windows 资源管理器以查看 WSL 资源。
- 开发容器:预构建的容器映像,其中包含 Git 和 zsh 等依赖项。
- 已转发端口视图:映射、查看和重用 SSH 和容器端口。
您可以在 远程开发发行说明 中了解新的扩展功能和错误修复。
扩展编写
可重复使用的 Codicons
对于大多数 VS Code 图标,使用 codicon 图标字体。扩展现在可以以简单而声明的方式重复使用这些图标
vscode.ThemeIcon
类型现在可以使用 codicon 的名称进行实例化。例如,new vscode.ThemeIcon("zap")
。vscode.MarkdownString
类型现在支持$(<name>)
内联语法。例如,myMdString.appendMarkdown('Hello $(globe)');
。请注意,要在MarkdownString
中使用 codicons,您必须启用supportThemeIcons
构造函数参数。- 扩展的
package.json
文件中定义的commands
现在可以使用 codicon 作为其图标。使用内联语法,例如"icon": "$(zap)"
。
主题:Light+
上面的悬停示例正在渲染所有可用的 codicon。悬停是使用下面的代码段创建的,但为了可读性,大多数 codicon 名称已从 all
常量中删除。
vscode.languages.registerHoverProvider(
'*',
new (class implements vscode.HoverProvider {
provideHover(doc: vscode.TextDocument, pos: vscode.Position) {
const all = `$(activate-breakpoints)$(add)...$(zoom-out)`;
const md = new vscode.MarkdownString(all, true);
return new vscode.Hover(md, doc.getWordRangeAtPosition(pos));
}
})()
);
用于完成项的插入和替换
在单词末尾触发的完成通常会替换该单词。但是,当在单词内部触发完成时,不清楚是否应该替换单词末尾。根据扩展作者的偏好,用户会获得其中一种行为。这不是理想的,现在有一个 API 可以为完成项表达插入和替换范围。
为此,我们在 CompletionItem#range
中添加了一个新的 OR 类型
export class CompletionItem {
range?: Range | { inserting: Range; replacing: Range };
//...
}
- 如果范围是
undefined
,则 VS Code 使用当前单词范围进行 替换,并使用在光标位置裁剪的相同范围进行 插入。 - 如果范围是简单的
vscode.Range
,则 VS Code 会知道只有一个位置可以进行插入或替换。 - 如果范围是具有
inserting
和replacing
范围的对象,则 VS Code 将直接使用它们。
此信息与 editor.suggest.insertMode
设置结合使用,该设置允许用户定义自己的偏好。我们要求扩展作者尽快采用此 API,因为我们计划在下一次发布中使插入和替换行为更加明显。
改进的 CallHierarchyProvider
我们对 CallHierarchyProvider#prepareCallHierarchy 进行了一项小更改,以便它现在可以返回一个或多个 CallHierarchyItem
元素。当对具有多个重载的元素询问调用层次结构时,many
选项很有用。
在终端上公开的创建选项
Terminal
对象现在有一个新的 creationOptions
属性,扩展可以使用该属性识别终端是如何创建的。
特定于语言的设置
扩展现在可以使用新的配置范围 language-overridable
贡献可以按语言覆盖的设置。
示例
"contributes": {
"configuration": {
"title": "sample",
"properties": {
"sample.languageSetting": {
"type": "boolean",
"scope": "language-overridable"
}
}
}
}
配置 API 已增强,以支持这些设置。您可以通过将必要的 languageId
传递给 API 来读取和更新这些设置。
示例
/**
* Read language configuration.
*/
const textDocumentConfiguration = vscode.workspace.getConfiguration('sample', {resource, languageId});
textDocumentConfiguration.get('languageSetting');
/**
* Override configuration under language
*/
textDocumentConfiguration.update('languageSetting', false, ConfigurationTarget.Global, true);
/**
* Listen language configuration changes
*/
workspace.onDidChangeConfiguration(e => {
if(e.affectsConfiguration('sample.languageSetting', {resource, languageId}) {
}
});
有关更多信息,请参阅 配置 API。
扩展视图上下文菜单
您现在可以使用新的菜单位置 extension/context
为扩展视图中的扩展上下文菜单贡献命令。
示例
"contributes": {
"commands": [
{
"command": "extension.helloWorld",
"title": "Hello World"
}
],
"menus": {
"extension/context": [
{
"command": "extension.helloWorld",
"group": "2_configure",
"when": "extensionStatus==installed",
}
]
}
}
运行命令时,将传递扩展的 ID 作为参数。
示例
vscode.commands.registerCommand('extension.helloWorld', extensionId => {
vscode.window.showInformationMessage(extensionId);
});
支持以下预定义上下文,您可以在命令的 when
条件中使用它们
extensionStatus==installed
isBuiltinExtension
用于访问替换变量的 DebugConfigurationProvider 钩子
调试的扩展 API 提供了一个钩子 resolveDebugConfiguration
,该钩子位于 DebugConfigurationProvider
上,可用于在将调试配置传递给调试适配器之前验证它。由于此钩子是在 变量被替换之前 调用的,因此验证代码可以轻松地将更多变量添加到调试配置中,并仍然能够及时替换它们。
这种方法可能难以在 resolveDebugConfiguration
钩子中使用 已解析的变量值,例如验证或实现仅存在于扩展中(而不是在调试适配器中,在那里 已经 有了替换的值)的功能。有关示例,请参阅 问题 #85206。一些扩展已经开始自己替换变量(这通常是不完整的,因为它没有涵盖所有情况)。
从用户的角度来看,这令人困惑。在调试配置中,可以使用一些属性变量(因为它们在变量替换发生后在调试适配器中被处理),而另一些属性变量则不能使用(因为它们在变量替换尚未发生的扩展中被处理)。问题 #87450 是后一个问题的典型示例。
在此里程碑中,我们通过向 DebugConfigurationProvider
添加第二个钩子 resolveDebugConfigurationWithSubstitutedVariables
来解决此问题,该钩子接收包含 所有已替换变量 的调试配置。
随着此新 API 的可用性,我们要求所有调试扩展作者仔细审查他们当前的 DebugConfigurationProvider.resolveDebugConfiguration
实现,并将所有不引入新变量但会从在已替换变量上运行中获益的代码移动到新的方法 resolveDebugConfigurationWithSubstitutedVariables
中。
在扩展中实现调试适配器
现有的调试扩展 API 支持注册 DebugAdapterDescriptorFactory
以多种方式运行调试适配器。
作为外部进程
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterExecutable('mockDebug.exe');
}
});
作为网络会话
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterServer(12345, 'localhost');
}
});
在此里程碑中,我们添加了第三种变体,其中可以提供 '内联' 调试适配器实现
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterInlineImplementation(new InlineDebugAdapter());
}
});
这消除了通过基于流的机制与适配器通信的必要性,并简化了开发,因为适配器在扩展内运行,并且可以轻松地作为 VS Code 的扩展调试的一部分进行调试。
内联实现(例如,上面的 InlineDebugAdapter
)需要实现 调试适配器协议。由于我们不想将完整的调试适配器协议包含在 VS Code 的扩展 API 中,因此我们引入了该协议的一个简化子集。接口 vscode.DebugAdapter
只有两个方法,一个是将 DAP 消息传递给适配器(handleMessage
),另一个是用于监听从适配器接收到的 DAP 消息(onDidSendMessage
)。
基于此接口,调试适配器的实现将从以下源代码开始
class InlineDebugAdapter implements vscode.DebugAdapter {
private sendMessage = new vscode.EventEmitter<DebugProtocol.ProtocolMessage>();
private sequence: 1;
readonly onDidSendMessage: vscode.Event<DebugProtocol.ProtocolMessage> = this.sendMessage
.event;
handleMessage(message: DebugProtocol.ProtocolMessage): void {
switch (message.type) {
case 'request':
const request = <DebugProtocol.Request>message;
switch (request.command) {
case 'initialize':
const response: DebugProtocol.Response = {
type: 'response',
seq: this.sequence++,
success: true,
request_seq: request.seq,
command: request.command
};
this.sendMessage.fire(response);
break;
// many more requests needs to be handled here...
default:
break;
}
break;
case 'response':
break;
case 'event':
break;
}
}
dispose() {
// clean up resources
}
}
由于调试适配器协议(作为节点模块 vscode-debugprotocol 可用)是 vscode.DebugAdapter
接口的兼容超集,因此如果您需要完整的协议并希望自己实现调试适配器,则可以导入该模块。
一个更简单的替代方法是(继续)使用我们默认的调试适配器实现,该实现作为节点模块 vscode-debugadapter 可用。从版本 1.38.0-pre.4 开始,此模块中引入的 DebugSession
(或 LoggingDebugSession
)与扩展 API 中定义的 vscode.DebugAdapter
接口兼容。
使用此 API,可以像这样轻松地使用现有的调试适配器实现
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor: _session => {
return new vscode.DebugAdapterInlineImplementation(new MockDebugSession());
}
});
有关详细信息,请参阅 模拟调试 示例。
注意: 在此版本中,我们已完成创建调试适配器的扩展 API。因此,我们宣布将在 **3 月版本中移除对 `debuggers` 贡献点中两个已弃用属性的支持。**
adapterExecutableCommand
- 请改用扩展 API `vscode.DebugAdapterDescriptorFactory` 和 `vscode.DebugAdapterExecutable`。Mock 调试示例 展示了如何使用 API。enableBreakpointsFor
- 请改用 `breakpoints` 贡献点。需要在 `package.json` 中进行转换。
如果当前(已弃用)JSON 如下所示
"contributes": {
"debuggers": [{
"type": "csharp",
// ...
"enableBreakpointsFor": [ "csharp", "razor" ]
// ...
}]
转换后将变为
"contributes": {
"breakpoints": [
{ "language": "csharp" },
{ "language": "razor" }
],
"debuggers": [{
"type": "csharp",
// ...
}]
我们建议受影响的扩展在 2 月份的时间范围内将其实现适应新的 API,以便我们有足够的时间在 3 月份之前解决问题。
建议的扩展 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试它们。和往常一样,我们很乐意收到您的反馈。以下是如何尝试提议 API 的步骤:
- 您必须使用 Insiders,因为提议 API 经常发生变化。
- 您必须在扩展的 `package.json` 文件中添加以下行:
"enableProposedApi": true
。 - 将 vscode.proposed.d.ts 文件的最新版本复制到项目的源位置。
请注意,您无法发布使用提议 API 的扩展。下一个版本中可能存在重大更改,我们绝不希望破坏现有扩展。
添加工作区编辑元数据
现在 VS Code 中提供的重构预览支持带有一个新的可选 API 提议。它允许您对工作区编辑的更改进行分类。例如,您可以定义更改是否需要用户确认,或添加诸如“重命名字符串和注释”之类的描述。此提议可以在 问题 #77728 中追踪,其当前设计围绕 WorkspaceEditMetadata 接口。
语义高亮
如果您有兴趣为您的语言添加语义高亮,语义高亮概述 提供了概念和新 API 的总结。
身份验证提供程序
一些扩展需要向其他服务进行身份验证。问题 #88309 中的提议将使扩展能够注册身份验证提供程序,其他扩展可以访问这些提供程序,从而提供执行身份验证的通用机制。
时间线提供程序
扩展很快就能将自己的源贡献到新的 时间线视图 中。有兴趣添加自己的时间线源吗?请查看 问题 #84297 中的早期提议,并提供任何您想反馈的内容。
Documentation.Refactoring 贡献点
提议的 `documentation.refactoring` 贡献点允许扩展为其重构提供文档。用户可以选择在请求重构时查看此文档
提议的贡献点使扩展可以使用命令来控制如何显示其文档
"contributes": {
"documentation": {
"refactoring": [
{
"title": "Learn more about JS/TS refactorings",
"when": "typescript.isManagedFile",
"command": "_typescript.learnMoreAboutRefactorings"
}
]
}
}
title
— 显示给用户的文档操作的标签。when
— 何时子句,用于指示何时显示文档。command
— 显示文档的命令。例如,此命令可以打开网页或直接在 VS Code 中显示文档。
问题 #86788 追踪了此提议的状态。
自定义编辑器的备份和热退出钩子
我们继续在提议的 自定义编辑器 API 上进行迭代。我们本月的主要调查是,如何为自定义编辑器启用 热退出。问题 #88719 涵盖了我们在支持热退出时遇到的一些挑战以及我们考虑的一些方法。
这次调查的结果是在 `WebviewCustomEditorEditingDelegate` 接口上添加了一个新的可选 `backup` 方法。VS Code 在资源更改后大约一秒钟调用此方法。在 `backup` 方法内部,扩展应该以当前状态持久化资源。大多数情况下,这意味着将资源写入工作区存储文件夹。然后,当编辑器重新加载时,它应该检查是否存在任何持久化备份,然后再从工作区本身加载资源。
我们将在下一次迭代中继续迭代自定义编辑器 API。
复杂完成标签
我们正在演进 `CompletionItem` API,以适应需要提供限定名称、导入路径、返回类型和其他信息的复杂完成项。信息必须预先提供,而不是以后解决。提供的信息将在线性建议小部件中显示。我们将在下一次迭代中对 当前提议 进行迭代。同时,我们正在考虑 在建议小部件中添加一个状态栏,以解决一些 UI 和可发现性挑战。我们期待您对 API 的反馈。
主题:Nord,字体:Input Mono
向诊断错误添加链接
诊断错误现在可以与其错误代码关联一个链接。提供链接后,它将显示在“问题”面板、内联错误视图和诊断错误悬停中。在我们下一次迭代中继续开发此功能时,您可以在 问题 #11847 中提供反馈。
语言服务器协议
语言服务器协议 的 3.15 版本现已推出。我们还发布了相应的 npm 模块,用于 VS Code LSP 客户端 和用 Node.js 编写的 LSP 服务器。库的最新版本包含语义标记的提议规范和实现。
LSP 网站现在托管 语言服务器索引格式规范 的初步版本以及相应的 LSIF 概述。
浏览器支持
将文件拖放到编辑器中
在浏览器中使用 VS Code 时,您现在可以将本地文件拖放到编辑器区域,将其打开为脏(未保存)文件,并包含文件内容。
新命令
键 | 命令 | 命令 ID |
---|---|---|
将面板移至左侧 | workbench.action.positionPanelLeft |
|
将面板移至右侧 | workbench.action.positionPanelRight |
|
将面板移至底部 | workbench.action.positionPanelBottom |
|
打开下一个最近使用的编辑器 | workbench.action.openNextRecentlyUsedEditor |
|
打开之前使用的编辑器 | workbench.action.openPreviousRecentlyUsedEditor |
|
在组中打开下一个最近使用的编辑器 | workbench.action.openNextRecentlyUsedEditorInGroup |
|
在组中打开之前使用的编辑器 | workbench.action.openPreviousRecentlyUsedEditorInGroup |
|
打开最近使用编辑器的选择器 | workbench.action.showAllEditorsByMostRecentlyUsed |
|
通过选择器打开之前使用的编辑器 | workbench.action.quickOpenPreviousRecentlyUsedEditor |
|
⌃Tab (Windows, Linux Ctrl+Tab) | 通过选择器在组中打开之前使用的编辑器 | workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup |
通过选择器打开最少使用的编辑器 | workbench.action.quickOpenLeastRecentlyUsedEditor |
|
⌃⇧Tab (Windows, Linux Ctrl+Shift+Tab) | 通过选择器在组中打开最少使用的编辑器 | workbench.action.quickOpenLeastRecentlyUsedEditorInGroup |
开发者:重新启动扩展主机 | workbench.action.restartExtensionHost |
工程
TSLint 到 ESLint 的迁移
VS Code 主要用 TypeScript 编写。除了编译器之外,我们还使用代码 linting 来强制执行某些样式和工程规则。过去,我们一直使用 TSLint 来执行此任务,但大约一年前,TSLint 的维护者 宣布弃用它,转而使用 ESLint。
在本里程碑中,我们已迁移到 ESLint - 这包括我们的 lint 配置 和我们的 自定义规则。最后但同样重要的是,我们还更新了 `yo code` 扩展生成器,以便新的 TypeScript 扩展也由 ESLint 检查。
如果您在自己的项目中使用 TSLint,我们创建了一个 将 TSLint 迁移到 ESLint 指南来帮助您切换到 ESLint。
使用 TypeScript 3.8-beta 构建 VS Code
VS Code 现在使用 TypeScript 3.8 beta 版本构建。
支持在 Shadow DOM 中托管 Monaco 编辑器
我们修复了有关鼠标处理和动态 CSS 的各种问题,因此 Monaco 编辑器现在可以托管在 Shadow DOM API Shadow Root 中。
新文档
容器
有一些新文章介绍了使用 Microsoft Docker 扩展创建 容器。您将找到用于将 Node.js 和 ASP.NET Core 应用程序容器化、推送到 容器注册表 以及 将容器部署 到云端的教程。
显著修复
- 12058:定期保存 UI 状态以防止在关闭时丢失
- 79205:在区分大小写的文件系统上连接到不区分大小写的平台时,资源管理器树不显示正确的内容
- 83543:仅对活动会话显示调试程序位置
- 85057:将自定义对话框中的对话框详细信息移动到描述行
- 86445:无法使用热键同时删除多个 Watch 调试变量
- 88240:创建多个 Watch 下拉表达式速度很慢
- 89057:允许只读编辑器显示问题
- 89405:文本文件:不要对只读模型报告为脏
感谢
最后但同样重要的是,对以下人士表示衷心的感谢,他们帮助使 VS Code 变得更好
对我们问题追踪的贡献
对 vscode
的贡献
- Alexander Fell (@AlexFell-Velo): 将位置面板添加到左侧 PR #84477
- AlexStrNik (@AlexStrNik): 修复 #89493 PR #89653
- Brett Cannon (@brettcannon): 合并请求请求 #87946 来自 brettcannon/patch-2 PR #87946
- Bura Chuhadar (@BuraChuhadar)
- Siberian Cat (@cat-kitten): Roblox XML 文件语法高亮支持 PR #87755
- Charles Gagnon (@Charles-Gagnon): 不要为覆盖范围检测任何测试代码 PR #86608
- Chayim Refael Friedman (@ChayimFriedman2): 停止调试会话后隐藏调试控制台 PR #83249
- Daniel Beigi (@dbeigi): 修复 #83983 添加高亮折叠 PR #84955
- Dmitry Gozman (@dgozman): 在单独的任务中处理调试适配器消息;参见 #33822、#79196 PR #81403
- Dima Krasner (@dimkr): 将 node-native-keymap 更新至 2.1.1,以便更轻松地进行 arm64 交叉编译 PR #86659
- David Lechner (@dlech): 修复在重启调试适配器后未获取线程的问题 PR #88790
- Daryl Chan (@dvrylc): 当没有活动图标主题时隐藏 Markdown 预览编辑器图标 PR #88692
- Fabien Launay (@FabienLaunay)
- Gabriel DeBacker (@GabeDeBacker): 允许扩展安装和卸载命令执行将异常抛回调用方 PR #88714
- Jens Fischer (@Gama11): 澄清 QuickPickItem.description 和 detail 的文档 PR #88622
- John Murray (@gjsjohnmurray): #85645 显示变量获取失败消息 PR #85842
- @GustavoASC
- Yunseok (@hannut91): 修复拼写错误 PR #88824
- Harald Rosberg (@hrosb): 将 electron 更新至 6.1.6,修复了辅助功能应用程序中缺少窗口标题的问题 PR #86837
- Andrew Liu (@hypercubestart): 修复解析的 JSDoc 作者标签 PR #80898
- Yuki Ueda (@Ikuyadeu): 将“declare var”替换为“declare const” PR #87709
- Andrii Dieiev (@IllusionMH): 对“要包含/排除的文件”字段的类型历史条目进行去抖动 PR #86785
- Jason (@JasonMFry): :speech_balloon: 修复欢迎页面上的语法 PR #88801
- Jean Pierre (@jeanp413)
- 合并请求请求 #87827 来自 jeanp413/fix-79857 PR #87827
- 修复枚举设置值中的链接无法点击的问题 PR #86463
- 修复在过滤处于活动状态时无法创建新的调试监视表达式的问题 PR #88502
- 修复文件拖放无法打开资源管理器窗格的问题 PR #88078
- 修复在文件资源管理器中创建新文件/文件夹和重命名时,聚焦的元素不正确的问题 PR #87052
- 修复在前缀之前使用片段替换时的片段替换问题 PR #86509
- 修复终端环境变量在空工作区中无法解析的问题 PR #83369
- 修复 mightProducePrintableCharacter 数字键盘支持 PR #77911
- 添加设置以控制是否默认情况下将焦点设置到 Peek Widget 中的内联编辑器上 PR #88185
- Andy Edwards (@jedwards1211): fix(extHostProgress): 使用节流而不是去抖动 PR #86161
- Jon Bockhorst (@jmbockhorst): 使终端链接行为与编辑器保持一致 PR #83620
- Robert Jin (@jzyrobert)
- Kristian Thy (@kthy): feat: 为 perl5 添加区域折叠 PR #85642
- kevinn (@latel): 修复 stateService 中的最小拼写错误 PR #86744
- Jiaxun Wei (@LeuisKen): fix: 将“allow-forms”添加到沙盒属性。 PR #87334
- Luis Oliveira (@lmvco): 支持 Shadow DOM PR #88536
- Jonathan Carter (@lostintangent): 删除 Markdown/Emmet 语言特性的方案限制 PR #87541
- Maher Jendoubi (@MaherJendoubi): 贡献:修复拼写错误 PR #89256
- Maira Wenzel (@mairaw): 修复拼写错误 PR #88730
- Matias Godoy (@mattogodoy): 修复拼写错误 PR #86957
- Matt Crouch (@mjcrouch): 修复各种图标容器位置缺少样式的问题 PR #88157
- Marko Novakovic (@mnovakovic): CallStackView 尝试将活动帧移动到顶部 PR #88074
- Mohammad Rahhal (@mrahhal): 修复镜像光标选择 PR #86986
- Ilya Murav'jov (@muravjov): editor.insertSpaceAfterComment 设置 PR #41747
- Micah Smith (@Olovan): 修复 #84145 在切换终端窗格时的问题 PR #88098
- pan93412 (@pan93412): fix(tokenClassificationExtensionPoint): 一些拼写错误 PR #89704
- Przemek Dziewa (@pdziewa): 修复状态栏项目过长的问题 PR #87164
- Oliver Larsson (@Playturbo): 友好的 pickstring 选项 PR #89180
- Remy Suen (@rcjsuen): 为 CompletionItem 的 insertText 添加缺少的文档 PR #87115
- @romainHainaut: 修复 #83644 PR #86619
- Sameer Puri (@sameer): 在 Linux 上启用 Shift-Insert 以粘贴主剪贴板,修复 #36170。 PR #63374
- @sharkykh: 恢复“重命名时使用当前 git 分支名称” PR #86919
- Simon Siefke (@SimonSiefke): 修复 #87181: 用于本地函数的 typescript 完成项类型 PR #87182
- @smilegodly: 去除了重复的“清除搜索”和“未找到设置” PR #86494
- Konstantin Solomatov (@solomatov)
- @SPGoding: 修复扩展包 package.json schema 中的错误键 PR #87042
- @sportshead: 从 search.contribution.ts 中删除 search.location PR #89585
- @sverg1: 自定义编辑器切换和保存/预览键盘快捷键 PR #86505
- 叶志浩 (@Vigilans): 修复 FileExplorer 中 TreeView 的列表服务在块中处理不当的问题 PR #87805
- @xearonet: 修复 .bat 变量包围问题 PR #88986
- Pen Tree (@zyctree): 修复 vscode.d.ts 中的拼写错误 PR #87704
对 vscode-eslint
的贡献
- Nikhil Verma (@NikhilVerma): 使配置模式为数组而非对象更加清晰 PR #853
- Tyler Waters (@tswaters): 修复 #805: 支持 package.json 中的 eslint PR #877
对 language-server-protocol
的贡献
- Sebastian Zarnekow (@szarnekow): 修复轻微的格式错误 PR #876
- @KamasamaK
对 vscode-languageserver-node
的贡献
对 debug-adapter-protocol
的贡献
- Gerald Richter (@richterger): 更新 adapters.md PR #89
对 vscode-vsce
的贡献
- Felix Hao (@felixhao28): 支持链接的 npm 模块 PR #411
- 道化师 (@wraith13): 修改消息以匹配当前情况 PR #409
- Shaun Tabone (@xontab): 将 npm list 命令的日志级别更改为错误,以提高兼容性 PR #412
对 vscode-js-debug
的贡献
- Ben Creasy (@jcrben): fix: 允许从 launch.json 中省略 "program" PR #203
对 vscode-generator-code
的贡献
- Jake Witcher (@jakewitcher): 修复语言扩展模板的 language-configuration.json 中的拼写错误 PR #189
- Stavros Tsourlidakis (@stsourlidakis): 修复 ext-command-js/test 中的 eslint 问题 PR #190
对 vscode-azurecli
的贡献
- Matthew Burleigh (@mburleigh): 支持多行命令 PR #61
对 vscode-emmet-helper
的贡献
- Diogo Felix (@onlurking): feat: 更新 emmet 缩写 PR #34
对 localization
的贡献
超过 800 名 云 + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (MLCP),其中约 170 名活跃贡献者贡献了 Visual Studio Code。我们感谢您的贡献,无论是提供新的翻译,对翻译进行投票,还是建议流程改进。
以下是 贡献者 的快照。有关该项目的详细信息,包括贡献者姓名列表,请访问项目的网站 https://aka.ms/vscodeloc。
- 波斯尼亚语(拉丁语,波斯尼亚和黑塞哥维那):Sead Mulahasanović, Adnan Rizvan, Ismar Bašanović。
- 保加利亚语:Andreyka Lechev。
- 捷克语:Michal Černík。
- 丹麦语:Lasse Stilvang。
- 荷兰语:Philip Denys, Lemuel Gomez, Dennis Hummel, Gideon van de Laar。
- 英语(英国):Martin Littlecott, Alexander Ogilvie, Krishna Regar, Alonso Calderon, Daniel Imms, Kamalsinh Solanki。
- 芬兰语:Tuula P.
- 法语:Antoine Griffard, Thierry DEMAN-BARCELÒ, Edouard Choinière, Joel Monniot, Rodolphe NOEL, Lucas A., Alain, BUFERNE, Xavier Laffargue, Mohamed Sahbi, DJ Dakta。
- 德语:Pascal Wiesendanger, Marvin Heilemann, jan-nitsche, Jakob von der Haar, Michael Richter。
- 希腊语:Valantis Kamayiannis, Θοδωρής Τσιρπάνης。
- 希伯来语:Ariel Bachar。
- 印地语:Kiren Paul, Niraj Kumar, Preeti Madhwal, Jaadu Jinn, Mahtab Alam。
- 匈牙利语:József Cserkó, Kiss Attila Csaba, Krisztián Papp。
- 简体中文:谷逸之, 易婷婷, 刘俊, ick, 董程, 曾鹏, 夏 Tony, 项斌, 普鲁文, paul cheung, 张锐, 李志强, 郑奕星, AlexiZz Nakido, 冉耀隆, 周大卫, 姜胜, 范永基, 姚锐, 杨越, 钟越, 魏成龙, 一斤瓜子, 朱艺婷, 张亚历山大, 孙艳军, 杨丽冰, 陈政诚, 张任飞, 朴光宇, 詹石岩, 杨舜杰, 王WJ, 陈暹。
- 繁体中文:林文妮, 船長, 蔡 Alan, 苏婷文。
- 印尼语:Eriawan Kusumawardhono, Aldila, Arif Fahmi, Laurensius Dede Suhardiman, Mychael Go, Christian Elbrianno, Septian Adi。
- 意大利语:Alessandro Alpi, Luigi Bruno。
- 日语:Fuwa Takayuki, Ariga Seiichi, Makino Koichi, Ozaki Yoshihisa, 内田 貴康, Ishii Shun, Uchida Kyohei, TENMYO Masakazu, Tokura Aya。
- 韩语:Hongju。
- 拉脱维亚语:Andris Vilde。
- 挪威语:Frode Aarebrot, Anders Stensaas, Thomas Ødegård, Thomas Isaksen。
- 波兰语:Makabeus Orban, Mateusz Redynk, Kacper Łakomski, Piotr Rysak, Wojciech Maj, Oskar Janczak, Szymon Seliga, Franx Bar, Marcin Anonimus。
- 葡萄牙语(巴西):Marcelo Fernandes, Arthur Lima, Albert Tanure, Loiane Groner, Nylsinho Santos, Alessandro Trovato, Pudda, Matheus Vitti Santos, Rodrigo Crespi, Wellington OStemberg, Roberto Fonseca, Felipe Galante, Rodrigo Tavares, Alessandro Fragnani, Felipe Nascimento, Alexis Lopes。
- 葡萄牙语(葡萄牙):Francisco Osorio, Luís Chaves, Ricardo Sousa Vieira, João Fernandes。
- 罗马尼亚语:Tiberiu Frățilă, LaServici, Dan Ichim。
- 俄语:Vadim Svitkin, Николай Соколовский, Дмитрий Кирьянов, Baturin Valery。
- 塞尔维亚语(西里尔字母):Dusan Milojkovic。
- 西班牙语:José María Aguilar, Ricardo Estrada Rdez, JOSE AHIAS LOPEZ PORTILLO, Gustavo Gabriel Gonzalez, Camilo Sasía。
- 瑞典语:Pelle Alstermo。
- 泰米尔语:Rajesh Waran, MUTHU VIJAY, Sankar Raj, Kadhireshan S, saravanan ramesh, Aravindh JANAKIRAMAN, Pandidurai R, Madhu Chakravarthy, Madhu Maha。
- 土耳其语:Mehmet Yönügül, Özgür ERSOY, mehmetcan Gün, Misir Jafarov, Isa Inalcik, Fırat Eşki, Gökberk Nur, Safa Selim。
- 乌克兰语:Serhii Shulhin, Arthur Murauskas, Oleksandr Krasnokutskyi, Фомін Тарас。
- 越南语:Dat Nguyen, Vương, Van-Tien Hoang, Dao Ngo, ng-hai。