Visual Studio Code
Code 是微软开发的一款跨平台文本编辑器,构建于 Electron 框架之上。Visual Studio Code 是 MIT 许可的 Code - OSS 仓库的二进制分发版,包含微软特定的定制内容,并以专有许可发布。有关混合许可的详细信息,请参见此 GitHub 评论。此外还有一个由社区驱动、以 MIT 许可发布的二进制版本,名为 VSCodium,默认禁用了遥测功能。
安装
Visual Studio Code 提供以下版本
- Code - OSS — Arch Linux 官方开源版本。附带启用 Open VSX 的配置。
- Visual Studio Code — 微软品牌的专有版本。
- VSCodium — 社区开源版本。在源代码中剔除了遥测功能 [1],也附带了 Open VSX 的配置。
这些不同的版本都是从 Code - OSS 仓库构建的,但具有不同的许可和默认配置。值得注意的是,只有专有版本才被允许使用微软的市场以及微软的专有扩展,例如 OmniSharp C# 调试器。后者通过握手机制强制执行,无法绕过。有关开源版本与“Visual Studio Code”品牌专有版本之间差异的更多信息,请查阅 Code - OSS GitHub wiki。
扩展支持
Code 的主要优势之一是其灵活的 API 和托管在 Visual Studio Marketplace 上的丰富扩展生态系统。然而,市场的使用条款仅允许将其用于微软品牌的版本。因此,Code - OSS 源代码不包含配置好的市场。上述开源版本添加了 Open VSX 扩展注册表,但这并不提供相同数量的扩展。绕过此限制是可能的。
product.json 似乎无效。目前已知受影响的有 C/C++ 和 C# Dev Kit。已知的变通方法有
- 请求维护者将其扩展上传到 Open VSX 注册表;
- 使用 code-marketplaceAUR(或 VSCodium 使用 vscodium-marketplaceAUR)添加 Microsoft Visual Studio Code Marketplace。该软件包安装了一个 Pacman 钩子,在每次软件包更新后,如此 Github 评论所示修补
product.json。
product.json 时,启用一个重新加载 IDE 的键盘快捷键会很有用。用法
运行 code 启动应用程序(VSCodium 使用 codium)。
如果由于某种原因希望启动 Visual Studio Code 的多个实例,可以使用 -n 标志。
配置
启动配置
用户级配置可以在以下文件中设置。请注意,这是这些软件包特有的,因为它们使用读取这些选项的修补后的加载器脚本。
使用这些文件,可以为 Visual Studio Code、Electron 或 Chromium 添加标志。
| 软件包 (Package) | 位置 |
|---|---|
| 代码 | ~/.config/code-flags.conf
|
| visual-studio-code-binAUR | ~/.config/code-flags.conf
|
| vscodiumAUR | 不支持 |
应用程序配置
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(或反之)时,可以复制或移动设置目录。由于它们共享大部分代码库,设置是兼容的。
集成终端
View > Integrated Terminal 或 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": "您的替代终端" 设置用于执行调试的默认终端。
示例
~/.config/Code/User/settings.json
"terminal.external.linuxExec": "gnome-terminal"
在 Wayland 下原生运行
Visual Studio Code 使用 Electron,有关如何使其在 Wayland 下原生运行的更多信息,请参阅 Wayland#Electron。
请记住,一些应用程序自带 Electron 副本,不会读取标准的 Electron 标志文件。您可以为每个应用程序的配置文件单独设置标志。
vscodiumAUR 不加载配置文件。它提供了一个专用的 vscodium-wayland.desktop 桌面条目文件,在菜单中显示为“VSCodium - Wayland”。
原生文件对话框
如果使用 Plasma,VS Codium 默认打开 GTK 文件对话框。要修复此问题,请确保安装了 KDE 桌面门户 (xdg-desktop-portal-kde) 并设置 GTK_USE_PORTAL=1 环境变量。
远程 SSH
官方的 "Remote - SSH" 扩展在 code (VSCode-OSS) 上无法工作。
有两个选项
- 安装 code-featuresAUR
- 安装 Open Remote-SSH 扩展(有一个 使其与 VSCode-OSS 兼容的 PR)。
故障排除
全局菜单在 KDE/Plasma 中无法工作
Visual Studio Code 使用 DBus 将菜单传递给 Plasma,请尝试安装 libdbusmenu-glib。[3]
无法将项目移至回收站
默认情况下,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 扩展),则需要安装微软品牌的版本(来自 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"
}
...
这是稳定、积极维护且是开源 VS Code 用户首选的方法。
无法使用 OmniSharp 服务器打开 .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"
使用“以 Sudo 身份重试”保存无效
此功能在 code 软件包中不起作用,因为微软不支持 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 尝试确定您的键盘布局。
找不到命令“...”
在微软品牌的版本中,product.json 文件列出了允许使用某些由扩展访问的建议 API 的扩展。Code - OSS 和 VSCodium 发行版缺少这些值,尽管这似乎并非由于许可原因。与强制启用市场不同,此解决方法是得到微软认可的 [4]。
可以通过安装一个在每次软件包更新时修补该文件的 Pacman 钩子来解决此问题
- 对于 code,安装 code-featuresAUR
- 对于 vscodiumAUR,安装 vscodium-featuresAUR
您也可以手动将相关条目添加到 product.json 文件中的 extensionAllowedProposedApi 部分
- 对于 code,编辑
/usr/lib/code/product.json - 对于 vscodiumAUR,编辑
/usr/share/vscodium/resources/app/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'
打开 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 代理导致的,请参阅 错误报告。可以通过安装像 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 应用程序的选项,您可以绕过此问题。然后,您可以使用 --force-device-scale-factor= 选项运行 Visual Studio Code,以实现适合您屏幕的缩放比例。
例如,对于缩放因子 2
$ code --force-device-scale-factor=2
No such interface“org.freedesktop.Secret.Collection”
请参阅 settings-sync#_troubleshooting-keychain-issues
使用 VSCodium 时 Github 身份验证失败
连接 Github 帐户时,将 URL 中的 "vscodium" 更改为 "vscode",如 此评论中所述。然后将标识令牌复制到 VSCodium 中。如果仍然失败,请安装像 gnome-keyring 这样的密钥环,或者创建新的密钥环,如在 Visual Studio Code 文档中和在 Github 上所提到的那样。
无法识别 OS 密钥环
在一些像 i3 这样的桌面环境中,VSCode 无法检测到密钥环。如果您使用 gnome-keyring,您可以添加以下行来强制 VSCode 使用该密钥环
~/.vscode-oss/argv.json
{
...
"password-store": "gnome-libsecret",
}
上面的示例路径适用于官方 code 软件包。您可能需要根据是否安装了不同的目录路径来调整 .vscode-oss 目录路径。
界面字体与系统设置中选择的字体不一致
为了渲染其界面,VSCode 使用在系统设置中选择的字体。如果您使用的是 OTF 字体,请尝试使用 TTF 字体。