跳转至内容

Visual Studio Code

来自 ArchWiki

Code 是一款由微软开发的跨平台文本编辑器,构建于 Electron 框架之上。Visual Studio Code 是基于 MIT 许可的 Code - OSS 仓库的二进制发行版,包含微软的特定定制,并以专有许可发布。有关混合许可的详细信息,请参阅此 GitHub 评论。此外还有一个社区驱动的、以 MIT 许可发布的二进制版本,称为 VSCodium,默认禁用了遥测功能。

安装

提供以下几种 Visual Studio Code 版本:

  • Code - OSS — Arch Linux 官方开源版本。包含启用 Open VSX 的配置。
https://github.com/microsoft/vscode || code
  • Visual Studio Code — 微软品牌的专有版本。
https://vscode.js.cn/ || visual-studio-code-binAUR
  • VSCodium — 社区开源版本。在源代码中剔除了遥测功能 [1],并附带了 Open VSX 配置。
https://vscodium.com/ || vscodiumAUR

这些不同的版本均构建自 Code - OSS 仓库,但具有不同的许可和默认配置。值得注意的是,只有专有版本才被允许使用微软的市场并使用微软专有的扩展,例如 OmniSharp C# 调试器。后者通过握手机制强制执行,无法绕过。有关开源版本与带有“Visual Studio Code”品牌的专有版本之间差异的更多信息,请查阅 Code - OSS GitHub wiki

扩展支持

Code 的主要优势之一是其灵活的 API 和托管在 Visual Studio Marketplace 上的丰富扩展生态系统。然而,市场的使用条款仅允许其与微软品牌的版本配合使用。因此,Code - OSS 源码不包含已配置好的市场。上述开源版本添加了 Open VSX 扩展注册表,但这并不提供相同广度的扩展。可以绕过此限制。

警告 一些由微软开发的语言扩展现在严格要求使用专有的 Visual Studio Code 版本才能工作 [2]。调整 product.json 似乎没有帮助。目前已知 C/C++C# Dev Kit 受此影响。

已知的解决方法有:

提示 在尝试更改 product.json 时,启用重新加载 IDE 的键盘快捷键非常有用。

用法

运行 code(或 VSCodium 的 codium)来启动应用程序。

如果由于某种原因希望启动多个 Visual Studio Code 实例,可以使用 -n 标志。

配置

启动配置

用户个人配置可以在以下文件中设置。请注意,这是这些软件包特有的,因为它们使用了读取这些选项的修补后的加载脚本。

使用这些文件,可以为 Visual Studio CodeElectronChromium 添加标志。

软件包 (Package) 位置
代码 ~/.config/code-flags.conf
visual-studio-code-binAUR ~/.config/code-flags.conf
vscodiumAUR 不支持

应用程序配置

注意code-featuresAUR 这样修补 product.json 的软件包可能会覆盖 nameShortdataFolderName 变量,导致下文描述不准确。

VSC 将设置存储在 $XDG_CONFIG_HOME/nameShort/User/settings.json,并将扩展数据存储在 非标准 XDG$HOME/dataFolderName 目录中,并使用 product.json 中的变量。

这对应于不同版本中的以下默认路径:

  • code 将设置存储在 ~/.config/Code - OSS/User/settings.json,将扩展存储在 ~/.vscode-oss
  • vscodiumAUR 将设置存储在 ~/.config/VSCodium/User/settings.json,将扩展存储在 ~/.vscode-oss

从 Code 迁移到 Codium(或反之)时,可以复制或移动设置目录。由于它们共享大部分代码库,设置是兼容的。

集成终端

本文或本章节已过时。

原因: Fish v4 已将 -d 3 更改为 --debug 分类(请在 Talk:Visual Studio Code 讨论)

视图 > 集成终端Ctrl + ` 可以打开集成终端。默认情况下,使用的是没有附加参数的 Bash,不过可以更改。terminal.integrated.shell.linux 设置要使用的默认 shell,terminal.integrated.shellArgs.linux 设置要传递给 shell 的参数。

示例

~/.config/Code/User/settings.json
"terminal.integrated.shell.linux": "/usr/bin/fish",
"terminal.integrated.shellArgs.linux": ["-l","-d 3"]

在设置了带有外部终端的集成 shell 参数后,你可能会遇到奇怪的提示符。删除该行以解决问题或改用外部终端。

外部终端

如果你正在使用 Terminator 作为 Arch 的默认终端,并且在 Visual Studio Code 上收到错误:Unable to launch debugger worker process (vsdbg) through the terminal. spawn truecolor ENOENT,你可以将 Visual Studio 使用的终端更改为其他终端(例如 gnome-terminal)。

"terminal.external.linuxExec": "你的替代终端" 设置用于 exec 调试的默认终端。

示例

~/.config/Code/User/settings.json
"terminal.external.linuxExec": "gnome-terminal"

在 Wayland 下原生运行

Visual Studio Code 使用 Electron,有关如何在 Wayland 下原生运行它的更多信息,请参阅 Wayland#Electron

请记住,有些应用程序自带 Electron 副本,不会读取标准的 Electron 标志文件。你可以在每个应用程序的配置文件中单独设置标志。

vscodiumAUR 不会加载这些配置文件。它提供了一个专门的 vscodium-wayland.desktop 桌面入口文件,在菜单中显示为“VSCodium - Wayland”。

原生文件对话框

如果使用 Plasma,VS Codium 默认打开 GTK 文件对话框。要修复此问题,请确保已安装 KDE 桌面门户 (xdg-desktop-portal-kde) 并设置 GTK_USE_PORTAL=1 环境变量

远程 SSH

官方的“Remote - SSH”扩展无法与 code (VSCode-OSS) 一起工作。

有两种选择:

故障排除

Visual Studio Code 使用 DBus 将菜单传递给 Plasma,请尝试安装 libdbusmenu-glib[3]

无法将项目移至回收站

默认情况下,Electron 应用程序使用 gio 删除文件。如果检测到 Plasma,则会自动选择 kioclient5。可以通过设置 ELECTRON_TRASH 环境变量来使用不同的回收站实现。

例如,要使用 trash-cli 删除文件:

$ ELECTRON_TRASH=trash-cli code

在撰写本文时,Electron 支持 kioclient5kioclienttrash-cligio(默认)和 gvfs-trash(已弃用)。更多信息可访问此 文档页面

无法调试 C#

本文章或章节需要扩充。

原因: DotRush 调试器是值得提及的替代方案吗?(请在 Talk:Visual Studio Code#DotRush Debugger 讨论)

如果你想调试 C# .NET(使用 OmniSharp 扩展),则需要安装微软品牌的版本(从 AUR 获取)。这显然是因为 .NET Core 调试器仅被授权与微软官方产品一起使用 - 请参见 此 github 讨论

使用开源软件包时,调试会静默失败。调试控制台将只显示初始消息:

You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.

对于使用开源软件包进行调试,可以使用 netcoredbgAUR。要在 VS Code 中运行它,请将此配置添加到项目的 .NET Core 启动配置中:

./.vscode/launch.json
"configurations": [
    {
...
    "pipeTransport": {
        "pipeCwd": "${workspaceFolder}",
        "pipeProgram": "/usr/bin/bash",
        "pipeArgs": ["-c"],
        "debuggerPath": "/usr/bin/netcoredbg"
    }
...

这是稳定、积极维护的方法,也是开源 VS Code 用户的首选方法。

无法使用 OmniSharp 服务器打开 .csproj,Microsoft.Common.props 位置无效

你必须从 mono 切换到正确的 SDK 版本属性。

/opt/dotnet/sdk/{VERSION}/Sdks/Microsoft.NET.Sdk/Sdk/Sdk.props
$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props

将导入修改为如下所示:

/opt/dotnet/sdk/{VERSION}/Sdks/Microsoft.NET.Sdk/Sdk/Sdk.props
/opt/dotnet/sdk/{VERSION}/Current/Microsoft.Common.props

OmniSharp 报错找不到 MSBuild

OmniSharp 介绍中指出,Arch Linux 用户应该安装 mono-msbuild 软件包。没有它,你可能会收到如下错误:

OmniSharp Log
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Registered MSBuild instance: StandAlone 15.0 - "~/.vscode/extensions/ms-vscode.csharp-1.18.0/.omnisharp/1.32.11/omnisharp/msbuild/15.0/Bin"
            MSBuildExtensionsPath = /usr/lib/mono/xbuild
            BypassFrameworkInstallChecks = true
            CscToolPath = ~/.vscode/extensions/ms-vscode.csharp-1.18.0/.omnisharp/1.32.11/omnisharp/msbuild/15.0/Bin/Roslyn
            CscToolExe = csc.exe
            MSBuildToolsPath = ~/.vscode/extensions/ms-vscode.csharp-1.18.0/.omnisharp/1.32.11/omnisharp/msbuild/15.0/Bin
            TargetFrameworkRootPath = /usr/lib/mono/xbuild-frameworks
System.TypeLoadException: Could not load type of field 'OmniSharp.MSBuild.ProjectManager:_queue' (13) due to: Could not load file or assembly 'System.Threading.Tasks.Dataflow, Version=4.5.24.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
...

你可能仍然可以构建(具体取决于你是否也安装了 mono)。

Omnisharp 自带其 mono 版本,因此如果它找不到已安装的版本,并且你想让 omnisharp 查看机器上安装的“全局”mono,请将其放入你的 settings.json:

settings.json
"omnisharp.useGlobalMono:"always"

使用“以 Sudo 重试”保存无效

此功能在 code 软件包中不起作用,因为微软不支持 Arch 的打包方式(原生而不是捆绑的 Electron)。有关更多信息,请参见 FS#61516上游错误报告

二进制版本 visual-studio-code-binAUR 不存在此问题,该功能在那里可以正常工作。

键盘变体或键位映射不匹配

根据 GitHub 上的 wiki

在某些 Linux 窗口管理器下切换键盘布局不会导致 VS Code 用来读取当前键盘布局的低级 X 窗口 API 发生变化。这意味着 VS Code 有时最终会读取其他配置的键盘布局之一,而不是当前活动的布局。欢迎提交 PR...

根据 wiki,有两种可能的解决方案:

  1. 确保 setxkbmap -query 返回的第一个键盘布局是你希望在 VS Code 中使用的布局。
  2. 在设置中使用 "keyboard.dispatch": "keyCode" 并重新启动 VS Code。这将防止 VS Code 试图确定你的键盘布局。

找不到命令“...”

在微软品牌的版本中,product.json 文件列出了允许使用扩展程序访问的某些建议 API 的扩展名。Code - OSS 和 VSCodium 发行版缺少这些值,尽管这似乎不是由于许可问题。与强制启用市场不同,此解决方法确实得到了微软的认可 [4]

此问题可以通过安装一个在每次软件包更新时修补文件的 Pacman 钩子来解决。

你也可以手动将相关条目添加到 product.json 文件的 extensionAllowedProposedApi 部分:

  • 对于 code,编辑 /usr/lib/code/product.json
  • 对于 vscodiumAUR,编辑 /usr/share/vscodium/resources/app/product.json

使 Live Share 工作的手动配置示例为 [5]

product.json
...
  "extensionAllowedProposedApi": [
    "ms-vsliveshare.vsliveshare",
    "ms-vscode.node-debug",
    "ms-vscode.node-debug2"
  ]
...

最后,你也可以使用命令行标志启用这些选项,正如 GitHub 拉取请求扩展所述

VS Live Share 缺少 API

使用上面的解决方案编辑 product.json,或者用以下命令打开 VS Code:

$ code --enable-proposed-api ms-vsliveshare.vsliveshare

另请注意,要使此扩展正常工作,你需要安装此处列出的依赖项 [6]

找不到命令 'remote-containers.openFolder'

打开 VS Code 并启用 remote-containers API,正如 FS#63374 中所评论的那样。

$ code-oss --enable-proposed-api ms-vscode-remote.remote-containers

命令 'GitHub Pull Requests: Configure Remotes...' 导致错误(找不到命令 'pr.configureRemotes')

用以下命令打开 VS Code:

$ code --enable-proposed-api GitHub.vscode-pull-request-github

Git: ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): 没有那个文件或目录

此错误是由于加密的 ssh-key 无法使用 ssh 代理导致的,参见错误报告。可以通过安装对话框提供程序(如 SSH keys#x11-ssh-askpass 或那里列出的替代方案,例如 KDE 的 ksshaskpass)来解决此问题。

需要注意的一点是,对于 ksshaskpass,你需要将其从 /usr/lib/ssh/ssh-askpass 链接过来,以便 VSCode 能找到它:

# ln /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass

或者为你的 shell 设置以下环境变量,参见 [7]

GIT_ASKPASS=ksshaskpass
SSH_ASKPASS=ksshaskpass
SSH_ASKPASS_REQUIRE=prefer

要禁用 VSCode 的内部 git-askpass,请添加:

~/.config/Code - OSS/User/settings.json
{
    "git.useIntegratedAskPass": false
}

集成终端中字符显示不全

太宽的字符可能会被剪裁。例如 Deno 堆栈跟踪中的斜体粗体文本。

可以通过将 "terminal.integrated.rendererType" 设置为 "experimentalWebgl" 来避免这种情况。

Wayland 下字体模糊

Visual Studio Code 默认在 Xwayland 下运行,如果你使用 HiDPI 屏幕,这可能会导致字体模糊。要修复此问题,请尝试强制 Electron 在 Wayland 下运行——参见 #在 Wayland 下原生运行

或者,如果你的 Wayland 环境提供了不缩放运行 Xwayland 应用程序的选项,你可以规避此问题。然后,你可以使用 --force-device-scale-factor= 选项运行 Visual Studio Code,以获得适合你屏幕的缩放比例。

例如,对于比例因子为 2 的情况:

$ code --force-device-scale-factor=2

没有此接口“org.freedesktop.Secret.Collection”

参见 settings-sync#_troubleshooting-keychain-issues

使用 VSCodium 时 Github 身份验证失败

连接 Github 账户时,按照此评论,将 URL 中的 "vscodium" 更改为 "vscode"。然后将身份验证令牌复制到 VSCodium 中。如果仍然失败,请安装 gnome-keyring 等密钥环,或者按照Visual Studio Code 文档Github 上的说明创建一个新的密钥环。

无法识别操作系统密钥环 (keyring)

在 i3 等某些桌面环境中,VSCode 无法检测到密钥环。如果你正在使用 gnome-keyring,可以添加以下行来强制 VSCode 使用该密钥环:

~/.vscode-oss/argv.json
{
    ...
    "password-store": "gnome-libsecret",
}

上面的示例路径是针对官方 code 软件包的。如果你安装了不同的软件包,可能需要调整 .vscode-oss 目录路径。

界面字体与系统设置中选择的字体不一致

VSCode 使用在系统设置中选择的字体来渲染其界面。如果你使用的是 OTF 字体,请尝试 TTF 字体。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.