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
新增話題