Visual Studio Code - Arch Linux 中文维基

跳转到内容

# Visual Studio Code

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Visual Studio Code，最近一次同步于 2025-5-25，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

Code 是由微软开发的跨平台文本编辑器，基于 Electron 框架构建，并且极具扩展性。可以在编辑器自带的应用商店，或者从 https://marketplace.visualstudio.com/VSCode 中安装扩展。“Visual Studio Code” 是 Code - OSS仓库的二进制分发版本，该仓库遵循 MIT 许可证，但包含了微软特定的定制，并在专有许可证下发布（有关混合授权的说明，请参阅此 GitHub 评论）。另外还有一个由社区驱动、遵循 MIT 许可证的二进制发行版本名为VSCodium，默认情况下禁用了遥测功能。

## 安装

下列安装包提供 VSCode:

- Code - OSS — Arch Linux 官方开源版本。配置有Open VSX。

  https://github.com/microsoft/vscode || code包

- Visual Studio Code — 微软官方版本，专有软件。

  https://code.visualstudio.com/ || visual-studio-code-binAUR

- VSCodium — 社区驱动的完全开源的 VSCode 版本,不带微软附属和遥测功能[1], 同时启用了Open VSX。

  https://vscodium.com/ || vscodiumAUR

其他可用版本：

- code-gitAUR(开发中的最新开源版本)
- visual-studio-code-insiders-binAUR(微软官方版本,每日更新)
- vscodium-binAUR(社区驱动的完全开源的 VSCode 版本,不带微软附属和遥测功能,二进制包)
- vscodium-gitAUR (社区驱动的完全开源的 VSCode 版本,不带微软附属和遥测功能,最新的开发版)

这些不同的版本都是基于Code - OSS构建的, 但具有不同的许可证和默认配置。值得注意的是，只有专有版本被允许使用官方拓展市场并使用微软的专有扩展，例如OmniSharp C# Debugger。后者通过握手机制进行验证，并不能被绕过。有关开源和专有 "Visual Studio Code "构建之间差异的更多信息，请查阅Code - OSS GitHub wiki.

### 扩展支持

Code 的一个主要特点是其灵活的API和丰富的扩展生态(托管在Visual Studio Marketplace上)。但是，根据Code的扩展商场使用条款，拓展商场只能和微软官方版本配合使用。因此code包并没有内置一个预配置的拓展商场，虽然它支持Open VSX registry，但其并不能提供相同范围的扩展。

警告：由微软开发的某些语言扩展现强制要求使用专有的Visual Studio Code版本[2]，且无法通过修改`product.json`文件来绕开限制。目前已知受影响扩展包括C/C++和C# Dev Kit。

已知的解决方法:

- 请求开发者将扩展上传至Open VSX registry;

- 根据你使用的版本，安装对应的包来接入官方拓展市场：code-marketplaceAUR/vscodium-bin-marketplaceAUR/vscodium-marketplaceAUR/vscodium-electron-marketplaceAUR。这些软件包包含一个 pacman 钩子，在每次更新后会根据Github comment来更新`product.json`文件。

提示：当你尝试频繁修改 `product.json` 文件时，你可以设置一个的快捷键 更为快捷地重新加载IDE

## 使用

对于以下版本，运行`code`或`code --no-sandbox`即可启动：

- code包
- visual-studio-code-binAUR

对于以下版本，运行`code-git`即可启动：

- code-gitAUR

对于以下版本，运行`codium`即可启动：

- vscodium-binAUR/vscodiumAUR/vscodium-gitAUR/vscodium-electronAUR

如果你想打开多个实例，可以使用`-n`选项。

## 配置

注意：像code-featuresAUR这样通过修改`product.json`来打补丁的软件包，可以覆盖变量 `nameShort` 和 `dataFolderName`，这可能会使下文部分的描述不准确。

- code包 将配置文件保存在 `~/.config/Code - OSS/User/settings.json`，拓展保存在`~/.vscode-oss`。

- visual-studio-code-binAUR 将配置文件保存在 `~/.config/Code/User/settings.json`，拓展保存在`~/.vscode`。

- vscodiumAUR 及其衍生版本的配置文件保存在 `~/.config/VSCodium/User/settings.json`，拓展保存在`~/.vscode-oss`。

当从Code迁移到Codium时(反之亦然), 可以直接复制或移动配置文件，因为两者共享大部分代码库，设置是兼容的。

### 集成终端

点击查看 > 集成终端或使用快捷键 `Ctrl + `` 打开集成终端。 Bash作为默认终端不带任何附加选项的方式启动。 `terminal.integrated.shell.linux` 可以配置默认终端，`terminal.integrated.shellArgs.linux` 可以配置启动终端时的附加参数。

例子：

    ~/.config/Code/User/settings.json

    "terminal.integrated.shell.linux": "/usr/bin/fish",
    "terminal.integrated.shellArgs.linux": ["-l","-d 3"]

您可能会收到奇怪的提示，这是由于将集成终端参数设置成了外部终端。要解决此问题，请移除该句，或换用外部终端。

### 外部终端

如果你使用Terminator作为Arch的默认终端，而且在Visual Studio Code中遇到一个错误`Unable to launch debugger worker process (vsdbg) through the terminal. spawn truecolor ENOENT`，可以换另一个终端（比如，gnome-terminal包）供Visual Studio Code使用。

`"terminal.external.linuxExec": "Yours alternative terminal"` 用于设置调试默认终端。

例子：

    ~/.config/Code/User/settings.json

    "terminal.external.linuxExec": "gnome-terminal"

### 在Wayland下原生运行

Code使用了Electron,你可以参照Wayland#Electron设置来让其在Wayland下原生运行。请注意，某些版本的应用会使用自带的Electron(而不是系统的Electron)，这种情况下应用将不会读取全局配置文件，你需要对环境变量进行修改(而不是全局配置文件)。

使用用户配置文件时，visual-studio-code-binAUR和code包都会读取`~/.config/code-flags.conf`处的配置文件。这仅针对这些包及其衍生版本,因为它们使用修改过的加载脚本来读取。

如果使用的是vscodium-binAUR, 其会加载`~/.config/codium-flags.conf`处的配置文件。注意从终端运行时，使用`codium` (而不是`vscodium`), 否则它将不会在Wayland下原生启动。

vscodiumAUR不会读取配置文件(因为它没有使用加载脚本)。其提供了一个桌面项文件 `vscodium-wayland.desktop` 以在Wayland下原生运行，在菜单中显示为"VSCodium - Wayland"。

### 原生文件对话框

如果你使用KDE/Plasma, 默认情况下VS Codium将会打开GTK文件对话框。请确保您已经安装了KDE桌面门户(xdg-desktop-portal-kde包)，并将环境变量设置为`GTK_USE_PORTAL=1`来解决这个问题。

### 远程SSH连接

官方的"Remote - SSH"扩展无法与code包（VSCode-OSS）兼容，有两种解决方案：

- 安装code-featuresAUR
- 尝试安装Open Remote-SSH 扩展（目前存在一个PR 使其支持 VSCode-OSS）。

## 疑难解答

### KDE/Plasma 全局菜单失效

Visual Studio Code使用DBus传递菜单，尝试安装 libdbusmenu-glib包。[3]

也可以直接:

    $ cp /usr/share/applications/code.desktop ~/.local/share/applications/

然后注销或者重启KDE桌面。

### 无法将内容移至回收站

默认状态下，Electron使用`gio`删除文件。如果检测到Plasma将会自动设置为使用`kioclient5`删除文件。不同的回收站实现可以通过设置`ELECTRON_TRASH`环境变量来使用。

例如，要使用trash-cli包删除文件：

    $ ELECTRON_TRASH=trash-cli code

这样一来，Electron就支持了`kioclient5`，`kioclient`，`trash-cli`，`gio`（默认）和`gvfs-trash`（不推荐）。详情可在此查看documentation page。

### C#无法调试

您若想调试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"
        }
    ...

### 无法使用OmniSharp server打开.csproj，Microsoft.Common.props位置无效

您必须从mono切换到合适SDK版本的props。

    /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"

。

### 使用“Retry as Sudo”保存无效

这个特性在code包软件包中无效，因为微软不支持Arch软件包的打包方式（原生的而非捆绑的Electron）。详情参见FS#61516和upstream bug report。

二进制发行版visual-studio-code-binAUR没有这个问题，该特性在此版本中有效。

### 键盘变体与键位映射不相符

根据GitHub上的wiki页面：

  Switching keyboard layouts under some Linux window managers does not result in a change in the low level X window APIs VS Code uses to read the current keyboard layout. This means that VS Code ends up sometimes reading one of the other configured keyboard layouts and not the current active one. PR welcome...

根据wiki页面，有两种解决方案：

1. 确保`setxkbmap -query`返回的第一个键盘布局是你想在VS Code中使用的。
2. 在设置中使用`"keyboard.dispatch": "keyCode"`，并重启VS Code。这将彻底阻止VS Code确定您的键盘布局。

### 指令“...”未找到

在VS Coded官方编译版本中，`product.json`文件列出了所有能够使用某些特定API的扩展。然而,`product.json`在Code - OSS与VSCodium中是缺失的，尽管这似乎不是由于许可问题。这可能导致一些插件无法正常工作(例如Live Share)。但和强制打开官方拓展商场不同的是，这个解决方案得到了微软的认可[4]。

您可以尝试通过安装一个pacman 钩子来解决，它将会在每次包更新时修补文件：

- 对于 code包, 安装 code-featuresAUR
- 对于 vscodiumAUR, 安装 vscodium-featuresAUR
- 对于 vscodium-binAUR, 安装 vscodium-bin-featuresAUR
- 对于 vscodium-electronAUR, 安装 vscodium-electron-featuresAUR

您也可以手动将相关条目添加到`product.json`文件中的`extensionAllowedProposedApi`部分：

- 对于 code包, 编辑 `/usr/lib/code/product.json`
- 对于 vscodiumAUR, 编辑 `/usr/share/vscodium/resources/app/product.json`
- 对于 vscodium-binAUR, 编辑 `/opt/vscodium-bin/resources/app/product.json`
- 对于 vscodium-electronAUR, 编辑 `/usr/lib/vscodium/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'未找到

如FS#63374所述，打开VS Code时启用remote-containers API：

    $ 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): No such file or directory'

这个错误是由于SSH密匙加密且无法使用SSH agent造成的,参见这个问题报告。您可以尝试安装一个配置解释器（dialogue provider），例如SSH keys#x11-ssh-askpass或者其他的代替方案(例如，对于KDE用户您可以尝试使用ksshaskpass包)。

对于ksshaskpass，为了让Code找到它，您需要将其链接到`/usr/lib/ssh/ssh-askpass`:

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

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

    GIT_ASKPASS=ksshaskpass
    SSH_ASKPASS=ksshaskpass
    SSH_ASKPASS_REQUIRE=prefer

为了禁用Code内置的git-askpass, 请在以下文件中添加:

    ~/.config/Code - OSS/User/settings.json

    {
        "git.useIntegratedAskPass": false
    }

### 终端中的截断字符

太宽的字符可能会被截断。例如Deno堆栈跟踪中使用的斜体粗体文本。

你可以将"terminal.integrated.rendererType"设置为"experimentalWebgl"来解决这个问题。

### 运行在Wayland下出现字体模糊

Code默认会在Xwayland下运行,如果你使用HiDPI屏幕，可能会有字体模糊的问题。你可以尝试让Electron强制在Wayland下运行——参见#在Wayland下原生运行。

或者如你的Wayland环境提供了运行未缩放的Xwayland应用程序的选项，你可以绕过这个问题。你可以附带参数`--force-device-scale-factor=`来运行Code,手动指定其缩放比例。

例如，将缩放比例设置成2:

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

### 找不到接口“org.freedesktop.Secret.Collection”

参见Code官方文档settings-sync#_troubleshooting-keychain-issues。

### 使用VSCodium时无法进行Github身份验证

参照这个Github评论,当要连接到Github时,将弹出的网址中的"vscodium"改为"vscode"，随后将识别令牌（identification token）拷贝到VSCodium中。如果还是不成功,你可以尝试安装一个密钥环，例如gnome-keyring包，或者你也可以参照Code官方文档与这个Github链接来自己创建一个密钥环。

如果遇到登录账户后会自动退出的情况，你也可以尝试安装密匙环gnome-keyring包来解决这个问题，如果你使用的是KDE,可能还需要安装qtkeychain-qt5包[8]。

### 找不到密钥环“An OS keyring couldn't be identified”

在一些桌面环境上(例如i3),Code可能会找不到密钥环。你需要手动指定Code使用的密匙环,例如gnome-keyring,在以下文件中添加:

    ~/.vscode-oss/argv.json

    {
        ...
        "password-store": "gnome-libsecret",
    }

这个文件地址仅适用于code包包，如果你使用的是其他版本的Code,请相应调整`argv.json`的目录。例如，如果安装的是visual-studio-code-binAUR，其地址应调整为`~/.vscode/argv.json`。

分类：​

- 文本编辑器

Visual Studio Code
添加话题