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 的市场并使用 Microsoft 专有扩展,例如 OmniSharp C# 调试器。后者通过握手机制强制执行,无法规避。有关开源和专有 “Visual Studio Code” 品牌版本之间差异的更多信息,请查阅 Code - OSS GitHub wiki。
扩展支持
Code 的主要优势之一是其灵活的 API 和托管在 Visual Studio Marketplace 上的丰富的扩展生态系统。但是,市场的使用条款仅允许将其与 Microsoft 品牌版本一起使用。因此,Code - OSS 源代码不包含配置好的市场。上面的开源版本添加了 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": "Your alternative terminal"
设置用于 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 版本 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 软件包中不起作用,因为 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: 配置远程…” 导致错误(命令 “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
没有名为 “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)在 electron 版本高于 32.2.8(例如 33.3.0)上运行时,已知存在粘贴不起作用的问题(上游问题,AL 问题)。
两种可能的解决方法是
- 删除
editor.action.clipboardPasteAction
键盘快捷键。按下Ctrl+K
Ctrl+S
进入菜单,然后使用Del
删除这两个快捷键。 - 降级 electron32 到版本 32.2.8。