2020年1月(版本1.42)
更新 1.42.1: 本次更新解决了这些问题。
下载:Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap
欢迎来到2020年1月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:
- 重命名预览 - 在差异视图中查看待处理的重命名,并轻松接受或拒绝更改。
- Open editors limit - 设置一次最多可以打开的编辑器数量。
- 面板位置 - 将面板(输出、终端)移动到编辑器的左侧、右侧或下方。
- 折叠代码高亮 - 通过新的背景高亮快速找到折叠区域。
- 调试控制台改进 - 语法高亮、括号匹配、输入历史。
- 定义全局任务 - 每个用户的任务可以在所有文件夹和工作区中使用。
- Java 扩展更新 - 支持数据断点和调用层次结构视图的 Java 支持。
- 远程开发 - 新的转发端口视图,用于映射SSH和容器端口。
- 新容器教程 - 学习如何创建和部署Docker容器。
- Preview features - 首次预览时间线视图、搜索编辑器、语义高亮等功能。
如果您想在线阅读这些发布说明,请访问更新在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 会在超时后取消扩展的保存操作。这种强制保证了快速保存,但有时可能会令人沮丧,因为预期的处理可能不会发生。
在此版本中,我们放弃了基于超时的方法,而是显示了一个进度通知,允许您取消参与保存的扩展(“保存参与者”)。该通知让您知道保存操作正在进行中,您可以决定是否等待保存参与者完成。

主题:浅色+
源代码控制输入
源代码控制视图中的输入框现在使用了Monaco Editor。Monaco Editor支持有用的功能,如多个光标和移动/复制行命令。
多根资源管理器中的两步折叠
当您使用多根工作区时,文件资源管理器中的折叠文件夹按钮现在具有两步行为。第一次点击将折叠每个顶级文件夹内的所有文件夹,第二次点击将折叠顶级文件夹。搜索视图已经具有此行为。

主题:Monokai
根据操作系统颜色方案自动切换主题
Windows 和 macOS 现在支持浅色和深色配色方案。有一个新的设置,window.autoDetectColorScheme,它指示 VS Code 监听操作系统配色方案的变化,并相应地切换到匹配的主题。
要自定义颜色方案更改时使用的主题,您可以通过以下设置来设置首选的光线和暗色主题:
workbench.preferredLightColorThemeworkbench.preferredDarkColorTheme
编辑器
控制Peek视图焦点
有一个新的设置和命令来控制Peek视图最初放置焦点的位置。默认情况下,Peek将焦点放在右侧的树上,以便您可以快速导航到引用。对于希望在编辑器中使用Peek进行快速代码更改的人来说,初始焦点放在树上并不是最佳选择。您现在可以使用editor.peekWidgetDefaultFocus设置来定义您的偏好,该设置可以设置为editor或tree。还有一个新的命令togglePeekWidgetFocus (⌘K F2 (Windows, Linux Ctrl+K F2)),允许您在Peek编辑器和树之间移动焦点。
折叠区域高亮显示
现在,通过添加背景高亮,折叠代码区域更容易被发现。

主题:暗黑+
该功能由设置 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的bug,不会更多)。
Linux 使用 Orca 的无障碍功能
我们已经开始研究如何使VS Code在Linux上通过Orca屏幕阅读器变得可访问。然而,由于这项工作需要Electron 7,我们预计在下一个稳定版本中会取得更多进展。在此期间,对于Linux的可访问性,您可以使用我们的Insiders版本并提供反馈。
集成终端
滚动灵敏度
终端的滚动灵敏度现在可以通过新的设置独立于编辑器进行配置:
terminal.integrated.mouseWheelScrollSensitivity- 鼠标滚轮滚动倍数(默认值为1)。terminal.integrated.fastScrollSensitivity- 当按下 Alt 时的快速滚动倍数(默认值为5)。
调试
简化的初始调试视图
为了简化调试视图的启动,VS Code 现在只显示一个运行和调试按钮。无调试运行操作(并非所有调试器都支持)仍然可以在调试主菜单中找到。
根据用户反馈,如果您设置了至少一个断点,断点面板将显示在起始视图中。

调试控制台改进
调试控制台输入
调试控制台输入现在使用当前活动编辑器的语言模式。这意味着调试控制台输入支持语法着色、缩进、引号自动关闭以及其他语言特性。

输入/输出展示
我们已经调整了调试控制台中输入和输出的显示方式,使其更易于区分。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自己的启动配置中,以便以更有意义的方式对它们进行分组,并隐藏那些仅作为复合启动配置一部分的配置。

调试活动栏图标和装饰
根据用户反馈,我们更新了活动栏中的调试图标,以更好地代表运行和调试。在调试时,调试图标上会有一个数字装饰,显示当前活动的调试会话数量。

任务
用户级别任务
在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提交历史的时间线视图:

主题: Dark Amethyst
在此早期预览中,时间轴视图显示了活动文档的Git提交历史,目前限制为32个项目。选择其中一个提交将打开该提交引入的更改的差异视图。扩展也将能够贡献自己的时间轴源,这些源将显示在此统一的时间轴视图中。最终,您还将能够选择(过滤)您希望在视图中看到的源。
敬请期待,我们为这个新功能准备了更多内容。您可以通过订阅issue #84297并关注标记有'timeline'标签的问题来跟进。如果您对在此视图中希望看到的其他类型信息有任何想法,请告诉我们!
搜索编辑器
我们继续致力于新的搜索编辑器的工作,本迭代的目标是使搜索编辑器成为主要的搜索体验。为此,我们实现了一个用于配置搜索编辑器查询的用户界面:

主题: Noctis Lilac, 字体: Hasklig
现在有几个用于搜索编辑器的命令,您可以将它们绑定到您选择的键盘快捷键:
search.action.openNewEditor: 在活动的编辑器组中打开一个新的搜索编辑器。search.action.openInEditor: 将当前搜索结果复制到新的搜索编辑器中。
有关搜索编辑器的更多信息和最新更新,请参见issue #23931。
注意: 在Insiders中,搜索编辑器默认是启用的,在Stable版本中可以通过将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稳定版中从市场安装。您可以通过启用debug.javascript.usePreview设置来开始使用它,与您现有的启动配置一起使用。以下是我们本月添加的一些新功能。
新的JS调试器将自动调试您在新的JavaScript调试终端中运行的命令,您可以通过调试:创建JavaScript调试终端命令打开它:

主题:地球之歌,字体:Fira Code
新的调试器还在你的package.json的scripts部分提供了一个调试 CodeLens,可以在无需额外配置的情况下运行和调试脚本:

您可以通过debug.javascript.codelens.npmScripts设置来配置CodeLens的可见性和位置(顶部或内联)。
试试看吧!如果你在使用新的调试器时遇到任何问题,可以在vscode-js-debug仓库中提交问题。
将视图从侧边栏移动到面板
正在积极努力使自定义VS Code布局变得更加容易。您可以通过以下设置测试进度:
"workbench.view.experimental.allowMovingToNewContainer": true
启用此设置后,某些视图将有一个新的上下文菜单选项,用于在侧边栏和面板之间移动它们。目前,此设置仅影响资源管理器中的大纲视图和扩展提供的视图。您也无法像在侧边栏中那样在面板中组合这些视图。

主题: LaserWave, 字体: Cascadia Code
这只是功能的一个预览,许多方面可能会发生变化,包括上述提到的限制。欢迎查看我们Insiders版本的进一步进展。
关于搜索的注意事项:随着新的通用视图移动方法的引入,旧的搜索视图设置 search.location 和命令 搜索:切换搜索视图位置 (search.action.toggleSearchViewPosition) 将被弃用。您的设置应该会自动迁移,但您需要使用新的通用方法来移动搜索视图。您不需要启用上述的实验性预览设置来使用新的上下文菜单项移动搜索视图。
TypeScript 3.8 beta 支持
尽管VS Code在本月正式发布之前不会捆绑TypeScript 3.8,但这次迭代我们添加了对所有令人兴奋的TypeScript 3.8-beta新功能的支持。
这些包括:
- 在JavaScript和TypeScript文件中对私有字段的智能感知和语法高亮显示。
- JavaScript 和 TypeScript 的调用层次结构支持。
- 转换为模板字符串的重构!
您可以通过安装TypeScript Nightly扩展轻松尝试所有这些新的TypeScript 3.8功能。请分享反馈,并告诉我们您在使用TypeScript 3.8测试版时是否遇到任何错误!
对扩展的贡献
Java 调试器支持数据断点
Debugger for Java 扩展现在支持在 VS Code 1.38 中引入的 数据断点。此功能允许您创建在变量值更改时触发的断点。
下面你可以看到当Owner.telephone字符串改变时调试器中断的情况:

Java 调用层次结构视图
Java语言支持扩展现在支持调用层次结构视图,该视图显示函数的所有调用或被调用,并允许您深入查看调用者的调用者和调用的调用。
右键点击一个符号并选择Peek > Peek Call Hierarchy以查看调用层次结构:

远程开发
工作仍在继续在远程开发扩展上,这些扩展允许您使用容器、远程机器或Windows Subsystem for Linux (WSL) 作为全功能的开发环境。
1.42版本的功能亮点包括:
- Remote - SSH: 改进了对Windows服务器的支持,包括自动操作系统检测。
- WSL: 支持在资源管理器中显示以打开Windows资源管理器查看WSL资源。
- 开发容器:预构建的容器镜像,其中包含如 Git 和 zsh 等依赖项。
- 转发端口视图:映射、查看和重用SSH和容器端口。
您可以在远程开发发布说明中了解新扩展功能和错误修复。
扩展开发
可重用的Codicons
对于大多数VS Code图标,使用的是codicon图标字体。扩展现在可以以简单和声明性的方式重用这些图标:
vscode.ThemeIcon类型现在可以使用 codicon 的名称进行实例化。例如,new vscode.ThemeIcon("zap")。vscode.MarkdownString类型现在支持$(内联语法。例如,) myMdString.appendMarkdown('Hello $(globe)');。请注意,要在MarkdownString中使用 codicons,必须启用supportThemeIcons构造函数参数。- 在扩展的
package.json文件中定义的commands现在可以使用codicon作为其图标。使用内联语法,例如"icon": "$(zap)"。
![]()
主题:浅色+
上面的悬停示例正在渲染所有可用的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#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}) {
}
});
欲了解更多信息,请参阅Configuration 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==installedisBuiltinExtension
用于访问替换变量的DebugConfigurationProvider钩子
调试的扩展API在DebugConfigurationProvider上提供了一个钩子resolveDebugConfiguration,可以在调试配置传递给调试适配器之前用于验证调试配置。由于此钩子在变量被替换之前调用,验证代码可以轻松地向调试配置添加更多变量,并仍然及时替换它们。
这种方法可能会使得在resolveDebugConfiguration钩子中使用已解析的变量值变得困难,例如验证或实现仅存在于扩展中的功能(而不是在调试适配器中,其中替换的值是可用的)。参见问题 #85206以获取示例。一些扩展已经开始自行替换变量(这通常是不完整的,因为它没有涵盖所有情况)。
从用户的角度来看,这很令人困惑。在调试配置中,一些属性变量可以使用(因为它们在替换发生后在调试适配器中处理),而一些属性变量则不能(因为它们在替换尚未发生的扩展中处理)。Issue #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());
}
});
详情请参见Mock debug示例。
注意: 在此版本中,我们已经完成了用于创建调试适配器的扩展API。因此,我们宣布将在三月份的版本中移除对debuggers贡献点中两个已弃用属性的支持:
adapterExecutableCommand- 使用扩展APIvscode.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",
// ...
}]
我们建议受影响的扩展在二月份的时间框架内调整其实现以适应新的API,以便我们有足够的时间在三月之前修复问题。
提议的扩展API
每个里程碑都伴随着新的提议API,扩展作者可以尝试使用它们。一如既往,我们非常重视您的反馈。以下是您尝试提议API需要做的事情:
- 你必须使用Insiders,因为提议的API经常变化。
- 您必须在扩展的
package.json文件中包含这一行:"enableProposedApi": true。 - 将最新版本的vscode.proposed.d.ts文件复制到项目的源代码位置。
请注意,您不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。
添加工作区编辑元数据
VS Code 中现在提供的重构预览支持附带了一个新的、可选的 API 提案。它允许您对工作区编辑的更改进行分类。例如,您可以定义更改是否需要用户确认,或者添加描述,如“在字符串和注释中重命名”。该提案可以在 issue #77728 中跟踪,其当前设计围绕 WorkspaceEditMetadata 接口。
语义高亮
如果您有兴趣为您的语言添加语义高亮,语义高亮概述提供了概念和新API的摘要。
认证提供者
一些扩展需要向其他服务进行身份验证。问题 #88309 中的提议将使扩展能够注册身份验证提供程序,这些提供程序可以被其他扩展访问,从而提供执行身份验证的通用机制。
时间线提供者
扩展很快就能将它们的来源贡献到新的时间线视图中。有兴趣添加你自己的时间线来源吗?查看问题 #84297中的早期提案,并提供你的任何反馈。
文档.重构贡献点
提议的documentation.refactoring贡献点允许扩展为其重构提供文档。用户可以在请求重构时选择查看此文档:

提议的贡献点通过使用命令让扩展控制其文档的显示方式:
"contributes": {
"documentation": {
"refactoring": [
{
"title": "Learn more about JS/TS refactorings",
"when": "typescript.isManagedFile",
"command": "_typescript.learnMoreAboutRefactorings"
}
]
}
}
title— 显示给用户的文档操作的标签。when— When clause 用于确定何时显示文档。command— 显示文档的命令。例如,此命令可以打开网页或直接在VS Code中显示文档。
Issue #86788 跟踪提案的状态。
自定义编辑器的备份和热退出钩子
我们继续在这个迭代中对提议的自定义编辑器API进行迭代。本月我们的主要调查是如何为自定义编辑器启用热退出。问题 #88719涵盖了我们支持热退出时遇到的一些挑战以及我们考虑的一些方法。
本次调查的结果是在WebviewCustomEditorEditingDelegate接口上新增了一个可选的backup方法。该方法在资源更改后大约一秒钟由VS Code调用。在backup方法内部,扩展应持久化资源的当前状态。大多数情况下,这意味着将资源写入工作区存储文件夹。然后,当编辑器重新加载时,它应在从工作区本身加载资源之前检查是否存在任何持久化的备份。
我们将在下一次迭代中继续改进自定义编辑器API。
复杂完成标签
我们正在改进CompletionItem API,以适应需要提供限定名称、导入路径、返回类型和其他信息的复杂完成项。这些信息必须提前提供,而不是稍后解析。提供的信息将内联显示在建议小部件中。我们将在下一次迭代中对当前提案进行迭代。同时,我们正在考虑在建议小部件中添加状态栏,以解决一些UI和可发现性挑战。我们期待您对API的反馈。

主题: Nord, 字体: Input Mono
向诊断错误添加链接
诊断错误现在可以有一个与其错误代码相关联的链接。当提供链接时,它将在问题面板、内联错误视图和诊断错误悬停中显示。随着我们在下一个迭代中继续改进此功能,您可以在issue #11847中提供反馈。

语言服务器协议
现在可以使用语言服务器协议的3.15版本。我们还发布了相应的npm模块,用于VS Code LSP客户端和用Node.js编写的LSP服务器。库的最新版本包含了一个关于语义令牌的提议规范和实现。
LSP 网站现在托管了语言服务器索引格式规范的初步版本以及相应的LSIF 概述。
浏览器支持
将文件拖放到编辑器中
在浏览器中使用VS Code时,您现在可以将本地文件拖放到编辑器区域,以未保存(脏)文件的形式打开它们,并显示文件内容。

新命令
| Key | Command | Command ID |
|---|---|---|
| Move Panel Left | workbench.action.positionPanelLeft |
|
| Move Panel Right | workbench.action.positionPanelRight |
|
| Move Panel To Bottom | workbench.action.positionPanelBottom |
|
| Open Next Recently Used Editor | workbench.action.openNextRecentlyUsedEditor |
|
| Open Previously Used Editor | workbench.action.openPreviousRecentlyUsedEditor |
|
| Open Next Recently Used Editor in Group | workbench.action.openNextRecentlyUsedEditorInGroup |
|
| Open Previously Used Editor in Group | workbench.action.openPreviousRecentlyUsedEditorInGroup |
|
| Open Picker of Most Recently Used Editors | workbench.action.showAllEditorsByMostRecentlyUsed |
|
| Open Previously Used Editor via Picker | workbench.action.quickOpenPreviousRecentlyUsedEditor |
|
| ⌃Tab (Windows, Linux Ctrl+Tab) | Open Previously Used Editor in Group via Picker | workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup |
| Open Least Used Editor via Picker | workbench.action.quickOpenLeastRecentlyUsedEditor |
|
| ⌃⇧Tab (Windows, Linux Ctrl+Shift+Tab) | Open Least Used Editor in Group via Picker | workbench.action.quickOpenLeastRecentlyUsedEditorInGroup |
| Developer: Restart Extension Host | 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 Editor现在可以托管在Shadow DOM API的shadow root中。
新文档
容器
有新的文章介绍了如何使用Microsoft的容器扩展创建Docker容器。您将找到关于容器化Node.js和ASP.NET Core应用程序的教程,推送到容器注册表,以及将容器部署到云中的教程。

显著的修复
- 12058: 定期保存UI状态以防止关闭时丢失
- 79205: 在大小写不敏感的平台上连接到大小写敏感的文件系统时,资源管理器树未显示正确内容
- 83543: 调试程序位置仅显示在活动会话中
- 85057: 将自定义对话框中的对话框详细信息移动到描述行
- 86445: 无法通过快捷键同时删除多个监视调试变量
- 88240: 创建多个监视下拉表达式时速度较慢
- 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)
- 西伯利亚猫 (@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 小部件中的内联编辑器 PR #88185
- Andy Edwards (@jedwards1211): 修复(extHostProgress): 使用节流而不是防抖 PR #86161
- Jon Bockhorst (@jmbockhorst): 使终端链接行为与编辑器一致 PR #83620
- Robert Jin (@jzyrobert)
- Kristian Thy (@kthy): 功能: Perl5 的区域折叠 PR #85642
- kevinn (@latel): 修复 stateService 中的最小拼写错误 PR #86744
- Jiaxun Wei (@LeuisKen): 修复:向沙箱属性添加 '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): 修复(tokenClassificationExtensionPoint): 一些拼写错误 PR #89704
- Przemek Dziewa (@pdziewa): 修复长状态栏项目 PR #87164
- Oliver Larsson (@Playturbo): 友好的选择字符串选项 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模式中的错误键 PR #87042
- @sportshead: 从 search.contribution.ts 中移除了 search.location PR #89585
- @sverg1: 自定义编辑器切换和保存/预览快捷键绑定 PR #86505
- Ye Zhihao (@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): 更新适配器文档 PR #89
对 vscode-vsce 的贡献:
- Felix Hao (@felixhao28): 支持链接的npm模块 PR #411
- 道化師 (@wraith13): Modifying messages to match the current situation PR #409
- Shaun Tabone (@xontab): npm list 命令的日志级别更改为 error 以提高兼容性 PR #412
对vscode-js-debug的贡献
- Ben Creasy (@jcrben): 修复:允许从 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): 功能: 更新emmet缩写 PR #34
对localization的贡献:
有超过800名Cloud + AI 本地化社区成员使用微软本地化社区平台(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.
- Chinese Simplified: Yizhi Gu, Tingting Yi, Justin Liu, ick, Charles Dong, Peng Zeng, Tony Xia, 斌 项, 普鲁文, paul cheung, 张锐, Zhiqiang Li, Yixing Zheng, AlexiZz Nakido, 冉 耀隆, Chow David, Sheng Jiang, yungkei fan, Yao Rui, Joel Yang, 钟越, Chenglong Wei, 一斤瓜子, Yiting Zhu, Alexander ZHANG, YanJun Sun, Libing Yang, ZHENGCHENG CHEN, 张 任飞, 光宇 朴, 石岩 詹, 舜杰 杨, WJ Wang, Siam Chen.
- Chinese Traditional: Winnie Lin, 船長, Alan Tsai, TingWen Su.
- 印度尼西亚语: Eriawan Kusumawardhono, Aldila, Arif Fahmi, Laurensius Dede Suhardiman, Mychael Go, Christian Elbrianno, Septian Adi.
- 意大利语: Alessandro Alpi, Luigi Bruno.
- Japanese: Takayuki Fuwa, Seiichi Ariga, Koichi Makino, Yoshihisa Ozaki, 貴康 内田, Ishii Shun, Kyohei Uchida, TENMYO Masakazu, Aya Tokura.
- 韩语: 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.
- 西班牙语: 何塞·玛丽亚·阿吉拉尔, 里卡多·埃斯特拉达·雷德斯, 何塞·阿希亚斯·洛佩斯·波蒂略, 古斯塔沃·加布里埃尔·冈萨雷斯, 卡米洛·萨西亚.
- 瑞典语: 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.