Visual Studio Code
Code とは、Microsoft によって開発されているクロスプラットフォームのテキストエディタで、Electron フレームワーク上でビルドされています。Visual Studio Code は、MIT ライセンス Code - OSS リポジトリの1つのバイナリディストリビューションで、Microsoft 特有のカスタマイズがなされており、プロプライエタリライセンスのもとでリリースされています。この混合ライセンスに関する詳細は、この GitHub コメントを見てください。また、MIT ライセンスの VSCodium というバイナリリリースもあり、これはコミュニティで運営されていて、テレメトリ がデフォルトで無効化されています。
目次
- 1 インストール
- 2 使用方法
- 3 設定
- 4 トラブルシューティング
- 4.1 KDE/Plasma でグローバルメニューが機能しない
- 4.2 アイテムをゴミ箱に移動できない
- 4.3 C# をデバッグできない
- 4.4 Unable to open .csproj with OmniSharp server, invalid Microsoft.Common.props location
- 4.5 MSBuild が見つからないと OmniSharp でエラーが発生する
- 4.6 "Retry as Sudo" での保存がうまくいかない
- 4.7 キーボードのバリアントやキーマッピングがマッピングされない
- 4.8 Command "..." not found
- 4.9 Git: ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
- 4.10 統合ターミナルで文字が切れる
- 4.11 Wayland でテキストがぼやける
- 4.12 No such interface“org.freedesktop.Secret.Collection”
- 4.13 VSCodium 使用時に Github との認証に失敗する
インストール
Visual Studio Code は以下のフレーバが提供されています:
- Code - OSS — 公式の Arch Linux オープンソースリリース。Open VSX を有効化する設定が同梱されています。
- Visual Studio Code — プロプライエタリな Microsoft ブランドのリリース。
- VSCodium — コミュニティのオープンソースリリース。ソースコード内でテレメトリが無効化されており [1]、Open VSX の設定も同梱されています。
これらの異なるフレーバはすべて Code - OSS リポジトリからビルドされていますが、ライセンスとデフォルトの設定が異なっています。特に、プロプライエタリなビルドだけが、Microsoft の marketplace 使用と (OmniSharp C# Debugger などの) Microsoft のプロプライエタリな拡張機能の使用を許可されています。後者はハンドシェイク機構によって強制されており、迂回することはできません。"Visual Studio Code" ブランドのオープンソースビルドとプロプライエタリビルドの違いに関する詳細は、Code - OSS GitHub wiki を見てください。
拡張機能のサポート
Code の主な強みの1つとして、柔軟な API と Visual Studio Marketplace 上でホストされていますリッチな拡張エコシステムがあります。しかし、marketpace の利用規約 は Microsoft ブランドのリリースのみでの使用を許可しています。そのため、Code - OSS source には、設定済みの marketplace が含まれていません。上記のオープンソースのリリースは、Open VSIX 拡張レジストリを追加しますが、拡張機能の数は劣ります。この制限を回避することは可能です。
既知の回避策は:
.vsix
ファイルから手動で拡張機能をインストールする。.vsix
ファイルは Microsoft Visual Studio Code Marketplace から入手できます。- 拡張機能のメンテナに拡張機能を Open VSX registry にアップロードするように依頼する。
- 次のパッケージのうち、あなたが使用しているビルドと関連するものを使って、Microsoft Visual Studio Code Marketplace を追加する: code-marketplaceAUR/vscodium-bin-marketplaceAUR/vscodium-marketplaceAUR/code-oss-marketplaceAUR。これらのパッケージは、パッケージ更新のたびにこの Github コメントにあるように
product.json
ファイルにパッチを適用する Pacman フック をインストールします。
使用方法
code
を実行して、アプリケーションを起動します (または、他のリリースを使用している場合、code-gitAUR は code-git
を、vscodium-binAUR/vscodiumAUR/vscodium-gitAUR は codium
を実行します)。
何らかの理由で Visual Studio Code の複数のインスタンスを起動した場合、-n
フラグを使用できます。
設定
code は設定を ~/.config/Code - OSS/User/settings.json
に保存します。
visual-studio-code-binAUR は設定を ~/.config/Code/User/settings.json
に保存します。
vscodiumAUR や関連するパッケージは設定を ~/.config/VSCodium/User/settings.json
に保存します。
Code から Codium に (またはその逆) 移行する場合、設定ディレクトリはコピー/移動することができます。設定はコードベースの殆どを共有しているので、互換性があります。
統合ターミナル
View > Integrated Terminal や 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"]
外部ターミナルで統合シェルの引数を設定するとプロンプトがおかしくなる場合があります。その行を削除してこの問題を解決するか、外部ターミナルを使用してください。
外部ターミナル
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": "Your alternative terminal"
で実行デバッグのときに使用するデフォルトのターミナルを設定します。
例:
~/.config/Code/User/settings.json
"terminal.external.linuxExec": "gnome-terminal"
Wayland でネイティブに実行する
Visual Studio Code は Electron を使います。VSCode を Wayland 上でネイティブに動かす方法についての詳細は Wayland#Electron を見てください。しかし、一部のアプリケーションはシステムの electron を使用せず、独自のものを使用します。そのようなアプリケーションは標準の Electron フラグファイルを読み込みません。
ユーザ毎の設定ファイルを使用する場合、visual-studio-code-binAUR と code は両方 ~/.config/code-flags.conf
を読み込みます。これらのパッケージは、これらのオプションを読み込むパッチを当てたローダスクリプトを使用するので、この挙動はこれらのパッケージ固有のものであることに注意してください。
vscodium-binAUR を使用する場合、~/.config/codium-flags.conf
ファイルを使用してください。ターミナルから実行する場合、(vscodium
ではなく) codium
で実行してください。さもないと、ネイティブな Wayland ウィンドウが使用されません。
vscodiumAUR は設定ファイルを読み込みません (パッチを当てたローダスクリプトを使用しないからです)。
ネイティブなファイル選択ダイアログ
KDE を使用している場合、デフォルトでは VS Codium は GTK のファイル選択ダイアログを開きます。これを修正するには、環境変数 GTK_USE_PORTAL=1
を設定してください。
トラブルシューティング
KDE/Plasma でグローバルメニューが機能しない
Visual Studio Code は DBus を使用してメニューを Plasma に渡します。libdbusmenu-glib をインストールしてみてください。[2]
アイテムをゴミ箱に移動できない
デフォルトでは、Electron アプリは gio
を使用してファイルを削除します。Plasma が検出されると、代わりに kioclient5
が自動的に選択されます。環境変数 ELECTRON_TRASH
を設定することにより、異なるゴミ箱の実装を使用できます。
例えば、trash-cli を使ってファイルを削除する場合:
$ ELECTRON_TRASH=trash-cli code
本稿執筆時点で、Electron は kioclient5
、kioclient
、trash-cli
、gio
(デフォルト)、gvfs-trash
(非推奨) をサポートしています。詳細はこちらの ドキュメントページ
で確認できます。
C# をデバッグできない
C#.NET を (OmniSharp 拡張機能を使って) デバッグしたい場合、Microsoft ブランドの .NET リリースを (AUR から) インストールする必要があります。これは、.NET Core デバッガーが公式の Microsoft 製品でのみ使用できるようにライセンスされているからだと思われます。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 launch 設定に追加してください:
./.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
MSBuild が見つからないと OmniSharp でエラーが発生する
OmniSharp introduction で説明されている通り、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 を見つけられない場合で、マシンにインストールされている "グローバルな" mono を検索するよう omnisharp を設定したい場合、以下を settings.json に追加してください:
settings.json
"omnisharp.useGlobalMono:"always"
"Retry as Sudo" での保存がうまくいかない
Microsoft は Arch パッケージのパッケージング方法 (バンドルされた Electron ではなくネイティブ) をサポートしていないため、この機能は code パッケージでは動きません。詳しくは FS#61516 と上流のバグレポートをご確認ください。
バイナリリリースの visual-studio-code-binAUR にはこの問題はなく、この機能は動作します。
キーボードのバリアントやキーマッピングがマッピングされない
GitHub の wiki によると、
- 一部の Linux ウィンドウマネージャでキーボードレイアウトを切り替えても、VS Code が現在のキーボードレイアウトを読み取るために使用する低レベルの X ウィンドウ API に変更が生じません。このため、VS Code は、現在アクティブなキーボードレイアウトではなく、他の設定されたキーボードレイアウトの 1 つを読み取ることになる場合があることを意味します。PR 歓迎...
wiki によると、2 つの可能な解決策があります。
setxkbmap -query
が最初のキーボードレイアウトとして、VS Codeで作業したいものを返すことを確認する。"keyboard.dispatch": "keyCode"
を使用し、VS Codeを再起動します。これで、VS Code がキーボードレイアウトを決定しようとするのを防ぐことができます。
Command "..." not found
Microsoft ブランドのリリースでは、拡張機能によってアクセスされる提案された特定の API の使用を許可されている拡張機能が product.json
ファイルにリストアップされています。Code - OSS と VSCodium にはこれらの値が存在しません (しかし、これはライセンスの問題というわけではないようです)。Marketplace の強制的な有効化とは異なり、以下の回避策は Microsoft によって推奨されています [3]。
この問題は、パッケージアップデートの時にそのファイルにパッチを当てる Pacman フックを導入することで解決できます:
- code の場合、code-featuresAUR をインストールしてください
- vscodiumAUR の場合、vscodium-featuresAUR をインストールしてください
- vscodium-binAUR の場合、vscodium-bin-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
を編集してください
Live Share を機能させる手動設定の例は [4]:
product.json
... "extensionAllowedProposedApi": [ "ms-vsliveshare.vsliveshare", "ms-vscode.node-debug", "ms-vscode.node-debug2" ] ...
最後に、GitHub のプルリクエスト拡張で説明されているように、コマンドラインフラグを使ってこれらのオプションを有効化することもできます。
product.json
を編集して上記の解決策を試すか、以下のオプションで VS Code を開いてください:
$ code --enable-proposed-api ms-vsliveshare.vsliveshare
また、この拡張機能を機能させるには、[5] にリストアップされている依存関係をインストールする必要があります。
Command 'remote-containers.openFolder' not found
FS#63374 でコメントされているように、remote-containers API を有効化して VS Code を開いてください:
$ 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)
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-key が暗号化されていて ssh エージェントを使用できないため発生します。バグレポートを見てください。この問題は、SSH 鍵#x11-ssh-askpass のようなダイアログプロバイダか、代替品 (例えば、KDE の ksshaskpass) をインストールすることで解決できます。
注意点としては、ksshaskpass の場合、/usr/lib/ssh/ssh-askpass
からリンクを貼って VSCode がそれを見つけられるようにする必要があります:
# ln /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass
または、以下の環境変数をシェルで設定してください ([6] を参照):
GIT_ASKPASS=ksshaskpass SSH_ASKPASS=ksshaskpass SSH_ASKPASS_REQUIRE=prefer
VSCode の内部 git-askpass を無効化するには、以下を追加してください:
~/.config/Code - OSS/User/settings.json
{ "git.useIntegratedAskPass": false }
統合ターミナルで文字が切れる
幅が大きすぎる文字は、切れてしまう場合があります。例えば、Deno stack-traces のイタリック太文字テキストなどです。
この問題は、"terminal.integrated.rendererType" を "experimentalWebgl" に設定することで回避できます。
Wayland でテキストがぼやける
Visual Studio Code はデフォルトで XWayland 下で実行されます。そのせいで、HiDPI スクリーンを使用している場合にテキストがぼやける場合があります。この問題を修正するには、Electron を Wayland 下で実行するように強制してみてください。#Wayland でネイティブに実行する を見てください。
No such interface“org.freedesktop.Secret.Collection”
settings-sync#_troubleshooting-keychain-issues を参照してください。
VSCodium 使用時に Github との認証に失敗する
Github アカウントに接続する場合、このコメントにあるように URLの "vscodium" を "vscode" に変更します。次に、識別トークンを VSCodium にコピーします。それでも失敗する場合は、Visual Studio Code docs や Github で説明されているように、gnome-keyring のようなキーリングをインストールするか、新しいキーリングを作成してください。