Visual Studio Code (简体中文)
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
即可启动:
- code-gitAUR
对于以下版本,运行codium
即可启动:
- vscodium-binAUR
如果你想打开多个实例,可以使用-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就支持了kioclient5
,kioclient
,trash-cli
,gio
(默认)和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#61516和upstream bug report。
二进制发行版visual-studio-code-binAUR没有这个问题,该特性在此版本中有效。
键盘变体与键位映射不相符
- 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页面,有两种解决方案:
- 确保
setxkbmap -query
返回的第一个键盘布局是你想在VS Code中使用的。 - 在设置中使用
"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-binAUR或visual-studio-code-insiders-binAUR.
要么使用上述解决方案编辑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