Visual Studio Code
Code 是由 Microsoft 开发的跨平台文本编辑器,构建于 Electron 框架之上。Visual Studio Code 是 MIT 许可的 Code - OSS 仓库的二进制发行版,带有 Microsoft 特定的自定义设置,并以 专有许可证 发布。有关混合许可的详细信息,请参阅 此 GitHub 评论。还有一个社区驱动的、MIT 许可的二进制发行版,名为 VSCodium,默认情况下禁用 遥测。
安装
以下 Visual Studio Code 版本可用
- Code - OSS — 官方 Arch Linux 开源版本。附带启用 Open VSX 的配置。
- Visual Studio Code — 专有的 Microsoft 品牌版本。
- VSCodium — 社区开源版本。在源代码中取消遥测 [1],也附带 Open VSX 的配置。
这些不同的版本都构建自 Code - OSS 仓库,但具有不同的许可和默认配置。值得注意的是,只有专有构建版才被允许使用 Microsoft 的 marketplace 并使用 Microsoft 专有扩展,例如 OmniSharp C# 调试器。后者由握手机制强制执行,并且无法规避。有关开源和专有“Visual Studio Code”品牌构建版之间差异的更多信息,请查阅 Code - OSS GitHub wiki。
扩展支持
Code 的主要优势之一是其灵活的 API 和托管在 Visual Studio Marketplace 上的丰富的扩展生态系统。但是,marketplace 的使用条款仅允许将其与 Microsoft 品牌版本一起使用。因此,Code - OSS 源代码不包含配置好的 marketplace。上面的开源版本添加了 Open VSIX 扩展注册表,但这没有提供相同的扩展广度。可以绕过此限制。
已知的解决方法是
- 手动从其
.vsix
文件安装扩展,该文件可以从 Microsoft Visual Studio Code Marketplace 获得。.vsix
文件可以使用以下命令安装:code --install-extension foo.vsix
; - 要求维护者将其扩展上传到 Open VSX 注册表;
- 通过使用以下与您正在使用的构建版相关的软件包之一来添加 Microsoft Visual Studio Code Marketplace:code-marketplaceAUR/vscodium-bin-marketplaceAUR/vscodium-marketplaceAUR/vscodium-electron-marketplaceAUR。这些软件包安装了一个 Pacman hook,在每次软件包更新后,按照 此 Github 评论 中所示修补文件
product.json
。
product.json
时,启用 重新加载 IDE 的键盘快捷键 很有用。使用
运行 code
以启动应用程序(或者如果您正在使用其他版本,则为 code-gitAUR 运行 code-git
,或为 vscodium-binAUR/vscodiumAUR/vscodium-gitAUR/vscodium-electronAUR 运行 codium
)。
如果出于任何原因您希望启动 Visual Studio Code 的多个实例,可以使用 -n
标志。
配置
VSC 将设置存储在 $XDG_CONFIG_HOME/nameShort/User/settings.json
中,并将扩展数据存储在 XDG-非标准 $HOME/dataFolderName
目录中,使用来自 product.json
的变量。
这转化为以下各种版本的默认路径
- 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
设置要使用的默认 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。此类应用程序将不会读取标准的 Electron 标志文件。
当使用每用户配置时,visual-studio-code-binAUR 和 code 都读取 ~/.config/code-flags.conf
。请注意,这特定于这些软件包,因为它们使用 修补的加载器脚本 来读取这些选项。
如果使用 vscodium-binAUR,请使用 ~/.config/codium-flags.conf
文件。如果从终端运行,请确保以 codium
(而不是 vscodium
)运行它,否则它将不会使用原生 Wayland 窗口。
vscodiumAUR 不加载配置文件(因为它不使用修补的加载器脚本)。它提供了一个专用的 vscodium-wayland.desktop
桌面条目 文件,该文件在菜单中显示为“VSCodium - Wayland”。
原生文件对话框
如果使用 Plasma,默认情况下 VS Codium 会打开 GTK 文件对话框。要修复此问题,请确保已安装 KDE 桌面门户 (xdg-desktop-portal-kde) 并设置 GTK_USE_PORTAL=1
环境变量。
故障排除
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 品牌版本(来自 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 启动配置中
./.vscode/launch.json
"configurations": [ { ... "pipeTransport": { "pipeCwd": "${workspaceFolder}", "pipeProgram": "/usr/bin/bash", "pipeArgs": ["-c"], "debuggerPath": "/usr/bin/netcoredbg" } ...
无法使用 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 软件包中不起作用,因为 Microsoft 不支持 Arch 软件包的打包方式(原生而不是捆绑的 Electron)。请参阅 FS#61516 和 上游错误报告 以获取更多信息。
二进制发行版 visual-studio-code-binAUR 没有此问题,并且该功能在那里有效。
键盘变体或按键映射无法映射
- 在某些 Linux 窗口管理器下切换键盘布局不会导致 VS Code 用于读取当前键盘布局的底层 X 窗口 API 发生更改。这意味着 VS Code 最终有时会读取其他配置的键盘布局之一,而不是当前活动的键盘布局。欢迎 PR...
根据 wiki,有两种可能的解决方案
- 确保
setxkbmap -query
将您想要在 VS Code 中使用的键盘布局作为第一个键盘布局返回。 - 在您的设置中使用
"keyboard.dispatch": "keyCode"
并重启 VS Code。这将阻止 VS Code 尝试确定您的键盘布局。
命令 "..." 未找到
在 Microsoft 品牌版本中,product.json
文件列出了允许使用扩展程序访问的某些提议的 API 的扩展程序。Code - OSS 和 VSCodium 发行版缺少这些值,尽管这似乎不是由于许可。与强制启用 Marketplace 不同,此解决方法已获得 Microsoft 的认可 [3]。
可以通过安装一个 Pacman hook 来解决此问题,该 hook 在每次软件包更新时修补该文件
- 对于 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 工作的手动配置示例是 [4]
product.json
... "extensionAllowedProposedApi": [ "ms-vsliveshare.vsliveshare", "ms-vscode.node-debug", "ms-vscode.node-debug2" ] ...
最后,您也可以使用命令行标志启用这些选项,如 GitHub pull request 扩展的描述。
使用上述方法编辑 product.json
,或使用以下命令打开 VS Code
$ code --enable-proposed-api ms-vsliveshare.vsliveshare
另请注意,要使此扩展工作,您需要安装此处列出的依赖项 [5]。
命令 '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 密钥和无法使用 ssh agent 的结果,请参阅 错误报告。可以通过安装对话框提供程序(如 SSH keys#x11-ssh-askpass)或那里列出的替代方案(例如 KDE 的 ksshaskpass)来解决此问题。
需要注意的一点是,对于 ksshaskpass,您需要将其从 /usr/lib/ssh/ssh-askpass
链接,以使 VSCode 找到它
# ln /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass
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 应用程序的选项,您可以规避此问题。然后,您可以运行 Visual Studio Code 并使用 --force-device-scale-factor=
选项来为您的屏幕实现适当的缩放比例。
例如,对于 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 上所述。
无法识别操作系统密钥环
在某些桌面环境(如 i3)上,VSCode 无法检测到密钥环。如果您正在使用 gnome-keyring,您可以添加以下行来强制 VSCode 使用该密钥环
~/.vscode-oss/argv.json
{ ... "password-store": "gnome-libsecret", }
上面的示例路径适用于官方 code 软件包。您可能需要调整 .vscode-oss
目录路径,具体取决于您安装的是否是不同的版本。
粘贴不起作用
code 1.95.0+(例如 1.96.4)在高于 32.2.8 的 electron 版本(例如 33.3.0)上运行时,已知粘贴不起作用(上游问题,AL 问题)。
两种可能的解决方法是
- 删除
editor.action.clipboardPasteAction
键盘快捷键。按Ctrl+K
Ctrl+S
进入菜单,并使用Del
删除两个快捷键。 - 降级 electron32 到版本 32.2.8。