Visual Studio Code

提供: ArchWiki
ナビゲーションに移動 検索に移動

Visual Studio Code は Microsoft によって開発されている、クロスプラットフォームのプロプライエタリテキストエディタ (End-User License Agreement に基づくライセンス) です。JavaScript と TypeScript で書かれた、Codium というフリーのオープンソースプロジェクト(MIT License に基づくライセンス)の上に構築されています。Codium と Visual Studio Code の関係は、Chromium と Google Chrome の関係とほぼ同じです。混合ライセンスの説明については、この GitHub コメントを参照してください。Visual Studio Code は Electron フレームワーク上に構築されており、エクステンションによる拡張ができます。拡張は web上 または テキストエディタの中 から参照できます。

インストール

VSCode は以下のフレーバーが提供されています。

  • Code - OSS — code-oss リポジトリからビルドされたオープンソースリリース 。
https://github.com/microsoft/vscode || code, code-gitAUR
  • Visual Studio Code — Microsoft ブランドのバイナリリリース。
https://code.visualstudio.com/ || visual-studio-code-binAUR, visual-studio-code-insiders-binAUR
  • VSCodium — コミュニティ主導の MIT ランセンスのバイナリリリース。
https://vscodium.com/ || vscodiumAUR, vscodium-binAUR, vscodium-gitAUR

"Code - OSS"(オープンソース)と "Visual Studio Code"(マイクロソフトのクローズドソースビルド)の違いについては、こちらをご覧ください。

機能拡張のサポート

機能拡張のための Microsoft marketplace の使用は、Visual Studio Code ファミリーの製品に制限されています。したがって、Code-OSS では使用できません。( FS#67780 を参照)

codevscodium-binAUR/vscodiumAUR/vscodium-gitAUR パッケージは、Eclipse Foundation が保守する Open VSX レジストリを使用するよう設定されています。これは、Code-OSS が特定の拡張機能を見つけられないように見える理由を説明しています。

既知の回避策は次の通りです。

  • Microsoft Visual Studio Code Marketplace から入手できる .vsix ファイルから、拡張機能を手動でインストールします。
  • Open VSX レジストリに拡張機能をアップロードするよう、メンテナに依頼する。
  • Microsoft Visual Studio Code Marketplace を追加するには、使用しているビルドに関連する以下のパッケージのいずれかを使用します: code-marketplaceAUR/vscodium-bin-marketplaceAUR/vscodium-marketplaceAUR。これらのパッケージは、パッケージ更新のたびにこの Github コメントにあるように product.json ファイルにパッチを適用する Pacman フックをインストールします。この方法で Microsoft Marketplace を使うことは、その利用規約に準拠しないことに注意してください。

使用方法

code を実行してください。

何らかの理由で Visual Studio Code のインスタンスを複数起動したい場合、-n フラグを使ってください。

設定

code の設定は ~/.config/Code - OSS/User/settings.json に保存されます。

visual-studio-code-binAUR の設定は ~/.config/Code/User/settings.json に保存されます。

vscodiumAUR 及びその他 Codium の設定は ~/.config/VSCodium/User/settings.json に保存されます。

Code から Codium (またはその逆) へ設定を移行する場合、設定ディレクトリはコピーまたは移動できます。殆どのコードベースを共有しているため設定には互換性があります。

統合ターミナル

View > Integrated TerminalCtrl + ` で統合されたターミナルが開きます。デフォルトでは、何も引数が指定されないと 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"]

外部ターミナル

Arch のデフォルトターミナルとして Terminator を使っている場合、Visual Studio Code で次のようなエラーが発生します: Unable to launch debugger worker process (vsdbg) through the terminal. spawn truecolor ENOENT。Visual Studio で使用するターミナルを別のターミナルに変更することで解決します (例: gnome-terminal)。

"terminal.external.linuxExec": "Yours alternative terminal" で実行・デバッグのときに使用するデフォルトのターミナルを設定します。

例:

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

Wayland でのネイティブ実行

この記事またはセクションの正確性には問題があります。
理由: The flags in standard electron-flags.conf are ignored (議論: トーク:Visual Studio Code#Enabling wayland through electron-flags.conf)

Wayland ベースの WM や DE を使用している場合、コマンドラインオプションに、--enable-features=UseOzonePlatform --ozone-platform=wayland を追加することで、Visual Studio Code を XWayland ではなく、Wayland でネイティブに実行させることができます。例えば、次のようにして、VSCode を起動してみてください。

$ code --enable-features=UseOzonePlatform --ozone-platform=wayland

これらのオプションは、${XDG_CONFIG_HOME}/electron-flags.conf ファイルに追加することで、Visual Studio Code が起動するたびに自動的に適用されます。現在の vscode バイナリがビルドされている electron のバージョンによっては正確な electron バージョン用の別の設定ファイル (例: ${XDG_CONFIG_HOME}/electron13-flags.conf) が必要になることがあります。(Wayland#Electron を参照)。

トラブルシューティング

KDE/Plasma でグローバルメニューが機能しない

Visual Studio Code は DBus を使用してメニューを Plasma に渡します。libdbusmenu-glib をインストールしてみてください。

アイテムをゴミ箱に移動できない

Electron アプリはデフォルトでは gio を使用してファイルを削除します。Plasma が検出されると、代わりに kioclient5 が自動的に選択されます。環境変数 ELECTRON_TRASH を設定することにより、さまざまなゴミ箱の実装を使用できます。

例えば、trash-cli を使ったファイル削除の場合。

$ ELECTRON_TRASH=trash-cli code

本稿執筆時点で、Electron は kioclient5, kioclient, trash-cli, gio (デフォルト) および gvfs-trash(非推奨)をサポートしています。詳細はこちらの documentation page で確認できます。

Unable to debug C#

If you want to debug C#.NET (using the OmniSharp extension) then you need to install the Microsoft branded release (from the AUR). This is apparently because the .NET Core debugger is only licensed to be used with official Microsoft products - see this github discussion.

When using the open-source package, debugging fails fairly quietly. The debug console will just show the initial message:

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.

For debugging with the open-source package netcoredbgAUR can be used. To run it in VS Code, add this configuration to .NET Core launch configuration of the project:

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

Unable to open .csproj with OmniSharp server, invalid Microsoft.Common.props location

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

Error from OmniSharp that MSBuild cannot be located

It is noted in the OmniSharp introduction that Arch Linux users should install the mono-msbuild package. Without it, you might get an error like:

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.
...

You might be able to build anyway (possibly depending whether you have mono installed too).

Omnisharp ships with its own mono version, so, if it is unable to locate the installed one, if you want to tell omnisharp to look for a "global" mono installed in your machine, put this in your settings.json:

settings.json
"omnisharp.useGlobalMono:"always"

"Retry as Sudo" での保存がうまくいかない

Microsoft は Arch パッケージのパッケージ方法 (バンドルされた Electron ではなくネイティブ) をサポートしていないため、この機能はコードパッケージでは動きません。詳しくは FS#61516アップストリームのバグレポートをご確認ください。

バイナリリリースの visual-studio-code-binAUR にはこの問題はなく、この機能は動作します。

Keyboard variants or keymappings do not map

As per the wiki on GitHub:

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...

Per the wiki, there are two possible solutions:

  1. make sure setxkbmap -query returns as the first keyboard layout the one you want to work with in VS Code.
  2. use "keyboard.dispatch": "keyCode" in your settings and restart VS Code. This will prevent VS Code from trying to determine your keyboard layout whatsoever.

Command "..." not found

In the official build of VS Code, a product.json file lists the extensions that are allowed to use certain proposed APIs accessed by extensions. However, the product.json is absent in the OSS build code. [1]

In the related issues below, some flags may be required to enable certain APIs. [2] You may either run code with these flags, or you can add the relevant entries to the extensionAllowedProposedApi section in the product.json file (code installs this to /usr/lib/code/product.json).

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

This can also be resolved by installing the code-featuresAUR package, which installs a pacman hook that patches the file on every package update. Alternatively, you may also consider installing the Microsoft branded packages: visual-studio-code-binAUR, visual-studio-code-insiders-binAUR.

VS Live Share missing API

Use either the solution above by editing the product.json, or open VS Code with:

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

Command 'remote-containers.openFolder' not found

Open VS Code enabling remote-containers API as commented in FS#63374:

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

Command 'GitHub Pull Requests: Configure Remotes...' resulted in an error (command 'pr.configureRemotes' not found)

Open VS Code with:

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

Git: ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory

This error is a result of an encrypted ssh-key, and can be solved by installing a dialogue provider like SSH keys#x11-ssh-askpass or the alternatives listed there like ksshaskpass for KDE.

One thing to note is that for e.g. ksshaskpass you would need to link it from /usr/lib/ssh/ssh-askpass to get VSCode to find it:

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

Cutoff characters in integrated Terminal

Characters that are too wide can end up clipping. For example the italic bold text of Deno stack-traces.

This can be avoided by setting "terminal.integrated.rendererType" to "experimentalWebgl".

Waylandでの文字化け

Visual Studio Code はデフォルトで XWayland で実行されるため、HiDPI スクリーンを使用している場合、文字がぼやけてしまうことがあります。この問題を解決するには、Electron を強制的に Wayland で実行するようにしてください(#Wayland でのネイティブ実行 を参照)。

No such interface“org.freedesktop.Secret.Collection”

See settings-sync#_troubleshooting-keychain-issues

Authentification with Github failed while using VSCodium

When connecting a Github account, change "vscodium" to "vscode" in the URL as seen in this comment. Then copy the identification token into VSCodium. Should it still fail, install a keyring like gnome-keyring or create a new keyring as mentioned here in the Visual Studio Code docs and here on Github.

一貫性のないファイルダイアログ

現在、vscodium は kde でも gtk ファイルダイアログを開きます。詳細については、Qt と GTK アプリケーションの外観の統合#Consistent file dialog を参照してください。