尝试在 VS Code 中使用

七月 2019 (版本 1.37)

更新 1.37.1:此更新解决了这些问题

下载:Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap


欢迎来到 Visual Studio Code 2019 年 7 月版本。此版本中有许多更新,我们希望您会喜欢,其中包括以下主要亮点:

如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
您还可以观看由开发者倡导者 Brian Clark 制作的此 1.37 版本亮点视频

Insiders 版本: 想尽快看到新功能吗?您可以下载每日更新的 Insiders 版本,并在最新更新发布后立即试用。有关 Visual Studio Code 的最新新闻、更新和内容,请在 Twitter 上关注我们:@code

工作台

新产品图标

我们已将所有产品图标更新为统一的样式、颜色和大小。我们经历了多个迭代,社区在整个过程中提供了有益的反馈。

注意:这不包括我们使用的 Octicons 图标,这些图标出现在状态栏和快速选择器中。

VS Code product icons

设置编辑器支持字符串数组

设置编辑器现在允许编辑字符串数组设置。添加项按钮将弹出一个输入框,用于添加新字符串。

Settings UI for array-of-string settings

扩展作者可以通过贡献配置并使用 typeitems 键来启用此支持。

{
  "type": "array",
  "items": {
    "type": "string"
  }
}

从设置文件中移除了警告

您的 settings.json 文件中将不再显示未知或不受支持的设置警告。相反,非活动设置将像未使用的源代码一样变暗,并带有悬停解释其原因。此外,对于当前已禁用的扩展的设置,您也不会看到警告。

Faded unused settings

在资源管理器中显示搜索结果

搜索视图中的文件上下文菜单现在包含一个在资源管理器中显示命令,用于在文件资源管理器中导航到该文件。

Reveal in Explorer command in search result

搜索正则表达式特性

回顾 1.29 版本,我们添加了设置 search.usePCRE2 以使搜索使用 PCRE2 正则表达式引擎。这使得可以使用一些高级正则表达式特性进行搜索,例如后向引用前向断言。得益于 ripgrep 中的一些上游工作,您现在无需启用特殊设置即可使用这些特性。如果正则表达式使用了 Rust 正则表达式引擎不支持的特性,ripgrep 会自动回退到 PCRE2 引擎,并且 search.usePCRE2 现在已弃用。提醒一下,VS Code 仅支持在 JavaScript 中有效的正则表达式,因为打开的编辑器仍然使用编辑器基于 JavaScript 的搜索进行搜索。

NPM 脚本资源管理器默认可见

之前,您必须启用设置 npm.enableScriptExplorer 才能使 NPM 脚本资源管理器可见,这很难被发现。现在,当工作区根目录中存在 package.json 文件时,NPM 脚本资源管理器会折叠显示在文件资源管理器中。

NPM Scripts Explorer collapsed

当您的工作区根目录没有 package.json 时,您仍然可以使用该设置来启用 NPM 脚本资源管理器。如果您想隐藏该资源管理器,可以右键单击其标题并在上下文菜单中选择隐藏

focusedView 上下文键

新增了一个键绑定 when 子句上下文键 focusedView,用于在给定视图获得焦点时显示或启用命令。

"when": "focusedView == nodeDependencies"

可访问性改进

我们修复了整个工作台的可访问性问题。修复的完整问题列表可以在 GitHub 上找到,带有 'accessibility' 标签

树视图中采用新的树控件

贡献树视图的扩展现在将获得新的树控件体验。该树控件提供了更好的性能,以及改进的键盘导航、过滤、自定义缩进、水平滚动等功能。如果您喜欢的扩展有自定义树视图,您应该会看到与早期添加到内置 VS Code 资源管理器中的相同的用户体验改进。

编辑器

在选区中显示空白字符

editor.renderWhitespace 设置现在支持 selection 选项。设置此选项后,空白字符将仅在选中的文本上显示。

Whitespace rendered on selection

这对于快速检查空白字符非常方便,而不会填满整个编辑器。

改进的迷你地图搜索结果可见性

在上一个版本中,我们在迷你地图(代码大纲)中引入了搜索装饰。这些装饰难以看清,因此在本迭代中,我们努力提高了它们的可见性。现在,整个行将在迷你地图中以低不透明度突出显示,而实际匹配项将以高不透明度显示。

Minimap search results

您还可以使用新的 minimap.findMatchHighlight 主题颜色更改装饰的颜色。

查找和替换中保留大小写

现在在编辑器的查找控件中进行替换时可以保留大小写。当编辑器的替换输入框中打开“保留大小写”选项(AB 按钮)时,此功能会开启。

Preserve Case button

目前 VS Code 仅支持保留全大写全小写首字母大写

Preserve case example

查找控件中按钮切换的活动状态

我们更新了查找控件中按钮切换的活动状态,为其添加了填充背景,这样您现在可以轻松分辨出何时焦点位于活动切换上。这会出现在搜索视图、查找和替换以及终端查找中。

在本次更新中,我们引入了一个新的主题颜色 inputOption.activeBackground,用于控制切换活动状态的背景颜色。此颜色复用了 focusBorder,以便默认情况下更好地与主题配合使用。我们还将 inputOption.activeBorder 的默认值设置为透明,以便边框仅用于焦点。

Button toggle active state

更新的信息颜色

统一警告颜色之后,我们还更新了 editorInfoForegroundeditorInfoBorder,使其与其余信息诊断颜色匹配。您将在查看错误视图和编辑器波浪线中看到此更新的颜色。

Info display colors

集成终端

搜索用户体验改进

之前,在终端内搜索会从终端视口顶部开始向下搜索。当到达底部时,会回绕到顶部。新行为与许多其他终端模拟器一致,从缓冲区底部开始向上搜索,从而大大减少了令人困惑的体验。

Terminal search now searches upwards by default

终端可访问性改进

当使用屏幕阅读器时,终端现在提供行导航模式,可以通过 方便地导航行。可以使用 退出该模式。

如果您想自定义键绑定,这些是新命令:

workbench.action.terminal.navigationModeExit
workbench.action.terminal.navigationModeFocusNext
workbench.action.terminal.navigationModeFocusPrevious

还进行了其他可访问性改进:

  • 现在空白行使用不间断空格字符代替显式字符串,这使得屏幕阅读器可以正确地播报。
  • 屏幕阅读器现在会在输入和删除字符时进行播报。虽然在某些情况下可能无效,但大多数情况都已涵盖。

在设置中解析变量

变量现在可以在以下设置中使用:

terminal.integrated.cwd
terminal.integrated.shell.<platform>
terminal.integrated.shellArgs.<platform>

例如,您不再需要扩展来在当前文件的文件夹中打开终端,只需添加此设置即可:

"terminal.integrated.cwd": "${fileDirname}"

改进的错误报告和诊断

之前,当终端使用错误的配置启动时,只会指示进程以错误代码退出。现在提供了更好的错误消息,引导用户解决几种常见情况。

Using an invalid shell setting will tell you the shell is invalid

语言

改进的 SCSS @import 导航

VS Code 以前静态解析 SCSS 导入。例如,@import './foo' 会解析为 _foo.scss。然而,SCSS 在解析导入方面更加灵活,允许 ./foo 解析到以下五个位置之一:

  • foo.scss
  • _foo.scss
  • foo/index.scss
  • foo/_index.scss
  • foo.css

如果解析的文件存在于磁盘上,VS Code 现在会将 @import './foo' 解析到这些位置之一。请注意,如果链接以 / 结尾,则只会解析到 /index.scss/_index.scss。如果链接以 .css.scss 等后缀结尾,VS Code 将不会尝试其他备用文件位置。

改进的 CSS 属性值补全

CSS 补全现在为另外 754 个 CSS 属性值提供了详细文档,其中包括不太常用的值。

CSS property value completion documentation

更快地使用 JavaScript 和 TypeScript 的仅语法特性

在上一个版本中,我们添加了一个实验性设置,该设置将为 VS Code 的 JavaScript 和 TypeScript 语言特性提供支持的 TypeScript 服务器拆分为单独的语法服务器和语义服务器。

在 VS Code 1.37 中,拆分服务器现在默认启用。这意味着对于大型 JavaScript 和 TypeScript 项目,基于语法的操作(例如代码折叠或文档大纲)应该会更快地可用。

任务

TypeScript 检测到的任务警告

在上一个版本中,TypeScript 任务自动检测从在 tsconfig 路径中使用特定于操作系统的路径分隔符更改为更跨平台友好的 /。如果 tsconfig 路径中存在 \\,VS Code 现在会显示警告。

{
  "type": "typescript",
  "tsconfig": "src\\tsconfig.json", // This will cause a warning to show. It should be "tsconfig": "src/tsconfig.json"
  "option": "watch",
  "problemMatcher": [
    "$tsc-watch"
  ]
}

任务和调试配置的 ${relativeFileDirname} 变量

新变量 ${relativeFileDirname} 解析为当前打开文件的目录相对于工作区文件夹的路径。该变量可以在任务和调试配置(tasks.jsonlaunch.json)中使用。

resolveTask 支持

任务提供程序现在可以实现 resolveTask,以减少提供任务的扩展的开销。resolveTaskprovideTasks 之后调用,因此如果您的扩展有一个设置关闭 provideTasks 和自动检测(例如内置的 gulp 扩展),但用户仍然在 tasks.json 中引用了您的一个任务,那么 resolveTask 将被调用,并且您的扩展可以返回该单个任务。

对扩展的贡献

远程开发 (预览)

远程开发扩展的开发工作仍在继续,该扩展允许您使用容器、远程机器或 Linux 的 Windows 子系统 (WSL) 作为全功能开发环境。您可以在远程开发发行说明中了解新的扩展特性和 bug 修复。

您还可以阅读最近的两篇博客文章,介绍:

Java 支持智能选择

Microsoft Java 扩展现在支持智能语义选择。您可以根据源代码中插入符号位置的语义信息来扩展或缩小选择范围。

  • 要扩展选区,请使用 ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)
  • 要缩小选区,请使用 ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)

扩展创作

vscode.workspace.fs

扩展现在可以使用新的 API 来读取、写入和管理文件和文件夹。这是 Node.js 的 fs 文件系统模块的替代方案,更重要的是,它允许访问来自贡献文件系统的文件,例如 SSH 或 WSL 远程文件系统。

以下代码片段展示了如何写入文件,更多用法示例可以在 fsconsumer-sample 中找到。

const writeStr = '1€ is 1.12$ is 0.9£';
const writeBytes = Buffer.from(writeStr, 'utf8');

await vscode.workspace.fs.writeFile(someUri, writeBytes);

建议:如果您的扩展当前正在使用 Node.js 的 fs 模块,请考虑迁移到新的 vscode.workspace.fs API。

DiagnosticsTag.Deprecated

诊断标签使扩展作者能够丰富诊断信息在编辑器中的表示。此版本添加了 DiagnosticTag.Deprecated,编辑器将使用删除线渲染该诊断信息。

Strikeout Deprecated decoration

上图中显示的诊断信息是由下面所示的 validate 函数创建的。diag.tags = [vscode.DiagnosticTag.Deprecated]; 这行代码添加了弃用标签。

let diagnostics = vscode.languages.createDiagnosticCollection('Sample Errors');
let validate = (editor: vscode.TextEditor | undefined) => {
  if (!editor) {
    return;
  }
  let result: vscode.Diagnostic[] = [];
  for (let line = 0; line < editor.document.lineCount; line++) {
    let pos = 0;
    while ((pos = editor.document.lineAt(line).text.indexOf('guys', pos)) >= 0) {
      let diag = new vscode.Diagnostic(
        new vscode.Range(line, pos, line, pos + 'guys'.length),
        'This is deprecated, use "folks", "people", or "you all" instead.'
      );
      diag.severity = vscode.DiagnosticSeverity.Warning;
      diag.tags = [vscode.DiagnosticTag.Deprecated];
      result.push(diag);
      pos += 'guys'.length;
    }
  }
  diagnostics.set(editor.document.uri, result);
};

vscode.workspace.workspaceFile

新增了一个工作区属性 workspace.workspaceFile,用于返回工作区文件的位置。例如:对于一个未命名且尚未保存的工作区,其位置可能是 file:///Users/name/Development/myProject.code-workspaceuntitled:1555503116870

根据打开的工作区类型,该值将是:

  • 当没有打开工作区或仅打开单个文件夹时为 undefined
  • 工作区文件的路径,表示为 Uri

如果工作区未命名,返回的 URI 将使用 untitled: 方案。

工作区文件位置的一个用途是调用 vscode.openFolder 命令,以便在关闭工作区后再次打开它。

vscode.commands.executeCommand('vscode.openFolder', uriOfWorkspace);

注意: 不建议直接使用 workspace.workspaceFile 位置将配置数据写入文件。相反,请使用 workspace.getConfiguration().update() 方法,该方法在打开单个文件夹以及未命名或已保存的工作区时都有效。

vscode.env.shell

提议的 vscode.env.shell API 现在已稳定。应该使用此 API 获取终端的默认 Shell,而不是使用 terminal.integrated.shell.<platform> 设置。

const shell = vscode.env.shell;
if (shell.search(/(powershell|pwsh)/i) !== -1) {
  // Do something special that PowerShell needs
}

when 子句支持 OR

现在可以在期望 when 子句的各种贡献点中使用逻辑或(||)。

例如,添加菜单贡献时:

"contributes": {
  "menus": {
    "editor/title": [{
      "command": "showPreviewToSide",
      "when": "editorLangId == markdown || editorLangId == html",
      "group": "navigation"
    }]
  }
}

AND 运算符 && 的优先级高于 OR 运算符 ||

活动输入选项的新主题颜色

新颜色 inputOption.activeBackground 允许您控制输入字段中激活选项的背景颜色。此颜色复用了 focusBorder,因此默认情况下能更好地与主题配合使用。我们还将 inputOption.activeBorder 的默认值设置为透明,以便边框仅用于焦点。

运行扩展集成测试前安装扩展

使用 vscode-test@1.1.0,扩展作者可以解析下载的 VS Code 副本的 CLI 路径,并使用该路径进行扩展管理。

例如:

const cp = require('child_process');
const { downloadAndUnzipVSCode, resolveCliPathFromExecutablePath } = require('vscode-test');

(async () => {
  const vscodeExecutablePath = await downloadAndUnzipVSCode('1.36.0');
  const cliPath = resolveCliPathFromExecutablePath(vscodeExecutablePath);

  cp.spawnSync(cliPath, ['--install-extension', '<EXTENSION-ID-OR-PATH-TO-VSIX>'], {
    encoding: 'utf-8',
    stdio: 'inherit'
  });
})();

在更新的测试扩展文档中阅读更多内容。

用于在 Linux 上运行扩展集成测试的 Travis CI 脚本更新

建议的扩展集成测试配置(见下文)在最新的 Travis CI Linux 环境中可能无法工作。

if [ $TRAVIS_OS_NAME == "linux" ]; then
  export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0;
  sh -e /etc/init.d/xvfb start;
  sleep 3;
fi

您现在可以使用下面的 Xvfb 脚本替代:

if [ $TRAVIS_OS_NAME == "linux" ]; then
  export DISPLAY=':99.0'
  /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
fi

在更新的持续集成文档中阅读更多内容。

提议的扩展 API

每个里程碑都会带来新的提议 API,扩展作者可以试用它们。一如既往,我们非常渴望您的反馈。以下是试用提议 API 的步骤:

  • 您必须使用 Insiders 版本,因为提议的 API 经常更改。
  • 您的扩展的 package.json 文件中必须包含此行:"enableProposedApi": true
  • 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目中。

请注意,您不能发布使用提议 API 的扩展。我们很可能在下个版本中进行重大更改,并且我们绝不想破坏现有扩展。

扩展终端

去年引入的提议的 TerminalRenderer API 经历了重大更改,现在已被弃用,取而代之的是“扩展终端”。新 API 更符合终端的实际工作方式,扩展现在实现了一个 Pseudoterminal 对象,它类似于 *nix 风格的 pty。

这是当前的提议:

export namespace window {
  export function createTerminal(options: ExtensionTerminalOptions): Terminal;
}

export interface ExtensionTerminalOptions {
  name: string;
  pty: Pseudoterminal;
}

interface Pseudoterminal {
  onDidWrite: Event<string>;
  onDidOverrideDimensions?: Event<TerminalDimensions | undefined>;
  onDidClose?: Event<void>;
  open(initialDimensions: TerminalDimensions | undefined): void;
  close(): void;
  handleInput?(data: string): void;
  setDimensions?(dimensions: TerminalDimensions): void;
}

以下是一些主要变化:

  • 扩展终端现在与常规终端的实现方式非常相似,只是使用了不同的选项对象。这也消除了通过 TerminalRenderer.terminal 访问 Terminal 对象的令人困惑的方式。
  • OS 进程的概念消失了,也不再需要返回退出代码。Pseudoterminal 可以简单地关闭终端,所有错误显示/通知都由扩展驱动。
  • 如果初始尺寸可用(终端面板之前已显示过),则使用初始尺寸调用 Pseudoterminal.open

这是一个简单的示例,展示了如何创建一个简单的终端,它会将您的输入回显:

const writeEmitter = new vscode.EventEmitter<string>();
let line = '';
const pty = {
  onDidWrite: writeEmitter.event,
  open: () => writeEmitter.fire('Type and press enter to echo the text\r\n\r\n'),
  close: () => {},
  handleInput: (data: string) => {
    if (data === '\r') {
      writeEmitter.fire(`\r\necho: "${line}"\r\n\n`);
      line = '';
    } else {
      line += data;
      writeEmitter.fire(data);
    }
  }
};
const terminal = vscode.window.createTerminal({ name: `My Extension REPL`, pty });
terminal.show();

我们希望相对较快地稳定此功能并移除已弃用的终端渲染器,可能在 v1.38 和 v1.39 之间。

vscode.CustomExecution2

此 API 是 vscode.CustomExecution 的演进。它使用新的改进的 vscode.Pseudoterminal,允许任务提供程序创建任务,使扩展内的代码能够完全控制终端,而不仅仅是执行脚本或进程。

export class CustomExecution2 {
  /**
   * @param process The [Pseudoterminal](#_Pseudoterminal) to be used by the task to display output.
   * @param callback The callback that will be called when the task is started by a user.
   */
  constructor(callback: (thisArg?: any) => Thenable<Pseudoterminal>);

  /**
   * The callback used to execute the task. Cancellation should be handled using
   * [Pseudoterminal.close](#_Pseudoterminal.close). When the task is complete fire
   * [Pseudoterminal.onDidClose](#_Pseudoterminal.onDidClose).
   */
  callback: (thisArg?: any) => Thenable<Pseudoterminal>;
}

vscode.commands.onDidExecuteCommand

新增了一个事件,只要执行命令就会触发,事件的负载会标识命令和参数。

export interface CommandExecutionEvent {
  command: string;
  arguments: any[];
}
export namespace commands {
  /**
   * An event that is emitted when a [command](#_Command) is executed.
   */
  export const onDidExecuteCommand: Event<CommandExecutionEvent>;
}

Webview.toWebviewResource 和 Webview.cspSource

之前提议的 Webview.resourceRoot API 已被重做。

现在 webview 上有两个提议的属性:

  • Webview.toWebviewResource - 将本地文件系统的 URI 转换为可在 webview 中使用的 URI。

    对于桌面版 VS Code,这将把 file: URI 转换为 vscode-resource: URI。

  • Webview.cspSource - webview 资源的内容安全策略源。

    对于桌面版 VS Code,这将是字符串 vscode-resource:

const panel = vscode.window.createWebviewPanel(
  CatCodingPanel.viewType,
  'Cat Coding',
  vscode.ViewColumn.One,
  {
    // Restrict the webview to only loading local content from our extension's `media` directory.
    localResourceRoots: [vscode.Uri.file(path.join(extensionPath, 'media'))]
  }
);

const imagePath = vscode.Uri.file(path.join(extensionPath, 'media'));

panel.html = `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${
      panel.webview.cspSource
    } https:;">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cat Coding</title>
</head>
<body>
    <img src="${panel.webview.toWebviewResource(imagePath)}/cat.gif" width="300" />
</body>
</html>`;

工程

在 VS Code 代码库中移除 suppressImplicitAnyIndexErrors

当我们为 VS Code 的源代码启用严格的 null 检查时,我们也在 TypeScript 编译器中开启了 "suppressImplicitAnyIndexErrors": true。此设置允许在值上使用括号访问器,即使该值的类型没有特定的索引访问签名。

这有问题,因为它很容易隐藏 TypeScript 本可以捕获的错误。

const map = new Map()
map.set('property', true);

...

if (map['property']) { // This is not an TS error but it does not do what you want!
    doImportantStuff();
}

在本次迭代中,我们移除了 suppressImplicitAnyIndexErrors 变通方法,并修复了它抑制的大约 250 个错误。最常见的两种修复方法是添加显式索引签名,以及在存储映射时切换到使用适当的 Map 类型而不是对象字面量。

基于网格的工作台布局进展

在本次里程碑中,我们继续推进了几个里程碑前开始的关于工作台基于网格布局的工作。一旦我们的初步解决方案完成,新版本的工作台功能应该类似,但在添加新布局选项和功能方面会更加灵活。

我们正在测试的一个新行为是能够将终端一直向上拖动,完全隐藏编辑器。目前,该布局仍由标志 workbench.useExperimentalGridLayout 控制。我们在上个里程碑中在 Insiders 版本中默认启用了它,下个里程碑也将继续这样做。

继续探索基于 iframe 的 webview

我们继续探索使用普通 iframe 来托管 VS Code 的 webview。作为这项工作的一部分,我们现在支持在独特的源中加载每个基于 iframe 的 webview。这确保了来自多个扩展的 webview 不会相互影响。

您现在还可以通过设置 "webview.experimental.useExternalEndpoint": true 在桌面版 VS Code 中启用基于 iframe 的 webview。请注意,使用基于 iframe 的 webview 目前需要互联网连接。虽然基于 iframe 的 webview 仍处于实验阶段,但我们非常感谢 webview 扩展作者提供关于您的扩展在使用基于 iframe 的 webview 运行时无法正常工作的部分的反馈。

新文档

远程开发教程

新增了入门教程,指导您如何使用远程开发扩展运行 Visual Studio Code。

  • 通过 SSH 远程 - 使用 Visual Studio Code 通过 SSH 连接到远程和虚拟机。
  • 在 WSL 中工作 - 在 Linux 的 Windows 子系统中运行 Visual Studio Code。
  • 开发容器 - 在 Docker 容器中运行 Visual Studio Code。

值得注意的修复

  • 422:恢复最大化窗口时保留窗口大小
  • 70371:Emmet 补全在大型文件中速度慢
  • 76922:侧边栏视图的顺序在所有窗口中持久化
  • 76989:禁用扩展在扩展调试时不起作用
  • 77110:调试集成终端支持未获取默认终端
  • 77926:有时输入 "string;" 会插入 "strings;"

致谢

最后但同样重要的是,非常感谢!以下各位为让 VS Code 变得更好所做出的贡献:

vscode 的贡献

对我们的问题跟踪的贡献

如果您想帮助我们管理接收到的问题,请参阅我们的 社区问题跟踪 页面。

language-server-protocol 的贡献

debug-adapter-protocol 的贡献

vscode-generator-code 的贡献

vscode-vsce 的贡献

inno-updater 的贡献

localization 的贡献

有 800 多名 Cloud + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (MLCP),其中约有 100 多名是 Visual Studio Code 的活跃贡献者。我们感谢您的贡献,无论是提供新翻译、为翻译投票还是建议流程改进。

这里是 贡献者 的快照。有关项目的详细信息(包括贡献者姓名列表),请访问项目网站:https://aka.ms/vscodeloc

  • 波斯尼亚语: Ismar Bašanović, Ernad Husremovic.
  • 保加利亚语: Hristiqn Hristov, Иван Иванов, Любомир Василев, Gheorghi Penkov.
  • 捷克语: Tadeáš Cvrček, Daniel Padrta, David Jareš, Jan Hajek, Jakub Stibůrek, Michal Franc, Jan Kos, Radim Hampl, Jiří Hofman, Samuel Tulach, Jan Brudný.
  • 丹麦语: René Pape, Lasse Stilvang, Allan Kimmer Jensen, Lars Vange Jørgensen, Alexander Matzen, Martin Liversage, Johan Fagerberg, Thomas Larsen, Anders Lund, Anton Ariens.
  • 荷兰语: Leroy Witteveen, Maxim Janssens, Luc Sieben, Hans Zoons, Jos Verlinde, Eric Algera, Damien van Gageldonk, Maxim Van Damme, Sven Klaasen, Tom Meulemans, Sujith Quintelier.
  • 英语(英国): Martin Littlecott, Alexander Ogilvie, Tobias Collier, William Wood, Fabio Zuin, Mohit Nain, Dan Jacobs, Sulkhan Ninidze, Giorgi Jambazishvili, alshyab wa3ed, YASHU MITTAL, Tejas kale, Mohammad Idrees, Chris Dias.
  • 芬兰语: Petri Niinimäki, Kiti Suupohja, Lasse Leppänen, Sebastian de Mel, Riku Riikonen, Valtteri Vatanen.
  • 法语: Antoine Griffard, Thierry DEMAN-BARCELÒ, Corwin D'Ambre, Mohamed Sahbi, Rodolphe NOEL, Maxime Coquerel, Steven Dugois, Cédric M., Michael VAUDIN, Bastien Boussouf, franto.
  • 德语: Julian Pritzi, Jakob von der Haar, Frank Lindecke, Dejan Dinic, Florian Erbs, Patrick Burke, Mario Koschischek, Florian Berger, Christof Opresnik, Hans Meiser, Carsten Kneip, Ettore Atalan, Thorsten Hans, Meghana Garise, Sebastian Seidl.
  • 希腊语: Δημήτρης Παπαϊωάννου, Sotiris Koukios-Panopoulos, Jim Spentzos, Θοδωρής Τσιρπάνης, Stratos Kourtzanidis, Charalampos Fanoulis, John D, Vassilis Vouvonikos.
  • 希伯来语: חיים לבוב, Shalom Craimer, Matan Amos, Eyal Ellenbogen, Snir Broshi, Kyle Orin.
  • 印地语: Satish Yadav, Amit Gusain, Sanyam Jain, Abhirav Kushwaha, Ashok Kumar Rathore, nirav adatiya, Rajeev Desai, shaswat rungta, Kumar Vaibhav, Pramit Das, Jagjeet Singh, Pratishek PII, Kiren Paul, Chethana S, Kishan K, Dhanvi Kapila.
  • 匈牙利语: Levente Borbély, Péter Nagy, Levente Hallai Seiler, Dániel Tar, Richard Borcsik, Boldi Kemény.
  • 简体中文: Tingting Yi, 斌 项, paul cheung, Yiting Zhu, 建东 薛, feiyun0112 feiyun0112, Joel Yang, 刘瑞恒 刘瑞恒, Edi Wang, Junzhe Liu, Dave Young, 张锐, Yizhi Gu, Fan Su, 昊宇 周, Justin Liu, Pluwen, Tony Xia, Yu Zhang, XIANG ZUO, 少民 谈, 彦佐 刘, Zhiqiang Li, 福永 叶, G.Y. Z, Hao Hu, 志乐 龚, meng shao, Horie Yuan, Xiangrui Kong, Liam Kennedy, 王文杰, 赵畅畅, 松阳 樊, anson zhang, Young Bige, Shi Liu, Wang Debang, Jessica Zhang, Licheng Ren, 驰 雷, sun qing, xiong Fu, Lynne Dong, zhao yu, 吉姆 舒, 红东 黄, 游 尤, 剑秋 陶, Hanlin Yang, , bh wu, Bravo Yeung, Michael Zhang, Hanyu ZHANG, Y F, WangCG duoduobear, ziqiang sun, 越 郑, 正元 刘, Jiang LI, 擎 钟, peng wei, 涛 徐, 逍遥 许, Charles Lee, 瑜 周, WL, 伟 全, rsy iridescent, Simon Chan, 海龙 黄, 仁松 陈, Jieting Xu, panda small, 翼 张, Chen Yang, Wang Weixuan, 舜杰 杨, Ludi Fang, 雨齐 刘, 建 周, 涛 罗, cuibty wong, 立飞 李, LI ZHAO, 九鼎 谭.
  • 繁体中文: 謝政廷, Winnie Lin, LikKee 沥祺 Richie, Martin Lau, Jeremy, 奕濬 潘, 小克, 煾 雪.
  • 印度尼西亚语: Jakka Prihatna, Septian Adi, Arif Fahmi, Laurensius Dede Suhardiman, maziyank, Heston Sinuraya, Hendra Widjaja, Don Nisnoni, Rachmat Wahidi, Franky So, Bervianto Leo Pratama, Eriawan Kusumawardhono, Rifani Arsyad, Afnizar Nur Ghifari, Christian Elbrianno, Pradipta Hendri, Azhe Kun.
  • 意大利语: Alessandro Alpi, Bruni Luca, Luigi Bruno, Andrea Dottor, Riccardo Cappello, Aldo Donetti, andrea falco, Emanuele Meazzo, Michael Longo, Marco Dal Pino.
  • 日语: EbXpJ6bp -, nh, Kyohei Uchida, Yoshihisa Ozaki, Hasefumi, TENMYO Masakazu, Takayuki Fuwa, Michihito Kumamoto, Koichi Makino, Seiji Momoto, Aya Tokura, Yosuke Sano, Makoto Sakaguchi, Kyohei Moriyama, 裕子 知念, Rie Moriguchi, Fujio Kojima, 美穂 山本, taniokae, 太郎 西岡, Hiroomi Kurosawa, Kazuya Ujihara, Yasuaki Matsuda.
  • 韩语: Hongju, 우현 조, Jong Heun Shin, 형섭 이, Kyunghee Ko, Youngjae Kim, siin lee, Jae Yong Kum, Hoyeon Han, Kevin Lee, SeungJin Jeong, Hong Kwon.
  • 拉脱维亚语: Kaspars Bergs, Andris Vilde.
  • 立陶宛语: Andrius Svylas, Augustas Grikšas, Tautvydas Derzinskas, Karolis Kundrotas, Martynas J..
  • 挪威语: Andreas Rødland, Cookius Monsterius, Dag H. Baardsen, Ole Kristian Losvik, Stephan Eriksen.
  • 波兰语: Warchlak, Wojciech Maj, Marcin Weksznejder, Rafał Całka, Tomasz Świstak, Tomasz Wiśniewski, Marek Biedrzycki, Szymon Seliga, Michal Szulc, Jakub Żmidziński, Bartek PL, Igor 05, Rafał Wolak, Tomasz Chojnacki, Piotr Grędowski, Czech Kaczmarek, Artur Pelczar, Marcin Floryan, Paweł Modrzejewski, Jakub Jedryszek, ‎Michał Stojke, Artur Zdanowski.
  • 葡萄牙语(巴西): Alessandro Trovato, Thiago Dupin Ugeda, Weslei A. de T. Marinho, Rafael Lima Teixeira, Gerardo Magela Machado da Silva, Marcos Albuquerque, Loiane Groner, Alessandro Fragnani, Judson Santiago, Andrei Bosco, Fábio Corrêa, Roberto Fonseca, Fabio Lux, Emmanuel Gomes Brandão, Guilherme Pais, Rodrigo Vieira, André Gama.
  • 葡萄牙语(葡萄牙): Ana Rebelo, Nuno Carapito, Pedro Daniel, Pedro Teixeira, João Carvalho, Diogo Barros, José Rodrigues, Sandro Pereira, Vitor Barbosa, Tiago Antunes.
  • 罗马尼亚语: Mihai Marinescu, Stefan Gabos, Alexandru Staicu.
  • 俄语: Andrey Veselov, Дмитрий Кирьянов, michael v, Иван Лещенко, nata kazakova, Анатолий Калужин, Валерий Батурин, Эдуард Тихонов.
  • 塞尔维亚语: Milos Zivkovic, Radovan Skendzic.
  • 西班牙语: Andy Gonzalez, Alvaro Enrique Ruano, Engel Aguilar, Carlos Mendible, José María Aguilar, David Fernández Aldana, Ricardo Rubio, Thierry DEMAN, julian3xl, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta, Jorge Serrano Pérez, Ricardo Estrada Rdez.
  • 瑞典语: Johan Spånberg, Notetur Nomen.
  • 泰米尔语: Merbin J Anselm, Kondasamy Jayaraman, Mani M, Boopesh Kumar, Vignesh Rajendran, Jeyanthinath Muthuram, Jaganathan B, Nithun Harikrishnan, Purusothaman Ramanujam, Krishna Pravin, Jeffin R P, Karunakaran Samayan, Vetri ..
  • 土耳其语: Meryem Aytek, BlueAngel-MG, Fıratcan Sucu, Ahmetcan Aksu, Ömer Sert, Mehmet Yönügül, Anıl MISIRLIOĞLU, Sinan Açar, Misir Jafarov, Umut Can Alparslan, Yakup Ad, Hüseyin Fahri Uzun, S. Ferit Arslan, Mesut Pişkin, Okan Çetin, Bruh Moment, Muhammed Emin TİFTİKÇİ, Burak Göksel.
  • 乌克兰语: Dmytro Kutianskyi, Arthur Murauskas, Sviatoslav Ivaskiv, Yaroslav Y, George Molchanyuk, Did Kokos, Alexander Varchenko, Вадим Шашков, Евгений Коростылёв.
  • 越南语: Khôi Phạm, Van-Tien Hoang, Belikhun, Việt Anh Nguyễn, Spepirus Shouru, Vuong Bui, Chủ Tất.