Visual Studio Code (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Visual Studio Code翻译。上次翻译日期:2020-08-07。如果英文版本有所更改,则您可以帮助同步翻译。

Visual Studio Code是一个跨平台,免费,开源 (使用MIT协议)的文本编辑器,由微软使用JavaScript和TypeScript开发。它构建于Electron框架之上,并且极具扩展性。可以在编辑器自带的应用商店,或者从 https://marketplace.visualstudio.com/VSCode 中安装扩展。尽管Visual Studio Code是开源软件,但是微软提供一个专有版本(使用终端用户许可协议授权),被用作visual-studio-code-binAURAUR软件包的基础(有关混合授权的说明,请参阅此 GitHub评论)。

安装

下列安装包提供 VSCode:

  • code(通过官方源码编译的开源版本)
  • code-gitAUR(开发中的最新开源版本)
  • visual-studio-code-binAUR(微软官方版本,专有软件)
  • visual-studio-code-insiders-binAUR(微软官方版本,每日更新)
  • vscodium-binAUR(社区驱动的完全开源的 VSCode 版本,不带微软附属和遥测功能,二进制包)
  • vscodiumAUR (社区驱动的完全开源的 VSCode 版本,不带微软附属和遥测功能,最新发行版)
  • vscodium-gitAUR (社区驱动的完全开源的 VSCode 版本,不带微软附属和遥测功能,最新的开发版)

微软ptvsd (Python Tools for Visual Studio Debug) 服务器/模块可用于python-ptvsdAUR

使用

对于以下版本,运行code即可启动:

对于以下版本,运行code-git即可启动:

对于以下版本,运行codium即可启动:

如果你想打开多个实例,可以使用-n选项。

配置

code 的配置文件保存在 ~/.config/Code - OSS/User/settings.json

visual-studio-code-binAUR 的配置文件保存在 ~/.config/Code/User/settings.json

集成终端

点击查看 > 集成终端 或使用快捷键 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"]

您可能会收到奇怪的提示,这是由于将集成终端参数设置成了外部终端。要解决此问题,请移除该句,或换用外部终端。

外部终端

如果你使用Terminator作为Arch的默认终端,而且在Visual Studio Code中遇到一个错误Unable to launch debugger worker process (vsdbg) through the terminal. spawn truecolor ENOENT,可以换另一个终端(比如,gnome-terminal)供Visual Studio Code使用。

"terminal.external.linuxExec": "Yours alternative terminal" 用于设置调试默认终端。

例子:

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

故障排除

KDE/Plasma 全局菜单失效

Visual Studio Code使用DBus传递菜单,尝试安装 libdbusmenu-glib

无法将内容移至回收站

默认状态下,Electron使用gio删除文件。不同的回收站实现可以通过设置ELECTRON_TRASH环境变量来使用。

例如,要在Plasma下删除文件:

$ ELECTRON_TRASH=kioclient5 code

这样一来,Electron就支持了kioclient5kioclienttrash-cligio(默认)和gvfs-trash(不推荐)。详情可在此查看documentation page

C#无法调试

您若想调试C#.NET(使用OmniSharp扩展),则需要通过AUR安装微软专版。原因是.NET Core调试器仅授权官方微软产品使用,参见this github discussion

若使用开源软件包,调试器失效时不会有太多信息。调试台仅会提示初始信息:

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 server打开.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 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

使用“Retry as Sudo”保存无效

这个特性在code软件包中无效,因为微软不支持Arch软件包的打包方式(原生的而非捆绑的Electron)。详情参见FS#61516upstream bug report

二进制发行版visual-studio-code-binAUR没有这个问题,该特性在此版本中有效。

键盘变体与键位映射不相符

根据GitHub上的wiki页面

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

根据wiki页面,有两种解决方案:

  1. 确保setxkbmap -query返回的第一个键盘布局是你想在VS Code中使用的。
  2. 在设置中使用"keyboard.dispatch": "keyCode",并重启VS Code。这将彻底阻止VS Code确定您的键盘布局。

指令“...”未找到

在VS Coded官方编译版本中,product.json文件列出了所有能够使用某些特定API的扩展。然而,product.json在OSS版code中是缺失的。 [1]

在下列相关问题中,需要开启某些开关(flags)来启用某些API:[2]。您也可以附上这些开关来运行code,或将相关入口添加至product.json文件的extensionAllowedProposedApi部分(code将其安装在了/usr/lib/code/product.json)。

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

再或者,您也可以考虑安装微软专版软件包visual-studio-code-binAURvisual-studio-code-insiders-binAUR.

VS Live Share缺失API

要么使用上述解决方案编辑product.json,要么使用如下命令打开VS Code:

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

指令'remote-containers.openFolder'未找到

FS#63374所述,打开VS Code时启用remote-containers API:

$ 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): No such file or directory

该错误是加密的ssh-key导致的,可以通过安装对话提供器(dialogue provider)解决,例如SSH keys#x11-ssh-askpass,或列出的替代品如KDE的ksshaskpass

有一点需要注意,您需要将其从/usr/lib/ssh/ssh-askpass连接,以使VS Code能够找到它。以ksshaskpass为例:

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