Visual Studio Code
Code 是由微軟開發的跨平台文本編輯器,基於 Electron 框架構建,並且極具擴展性。可以在編輯器自帶的應用商店,或者從 https://marketplace.visualstudio.com/VSCode 中安裝擴展。「Visual Studio Code」 是 Code - OSS倉庫的二進制分發版本,該倉庫遵循 MIT 許可證,但包含了微軟特定的定製,並在專有許可證下發佈(有關混合授權的說明,請參閱此 GitHub 評論)。另外還有一個由社區驅動、遵循 MIT 許可證的二進制發行版本名為VSCodium,默認情況下禁用了遙測功能。
安裝[編輯 | 編輯原始碼]
下列安裝包提供 VSCode:
- Code - OSS — Arch Linux 官方開源版本。配置有Open VSX。
- Visual Studio Code — 微軟官方版本,專有軟件。
- VSCodium — 社區驅動的完全開源的 VSCode 版本,不帶微軟附屬和遙測功能[1], 同時啟用了Open VSX。
其他可用版本:
- code-gitAUR(開發中的最新開源版本)
- visual-studio-code-insiders-binAUR(微軟官方版本,每日更新)
- vscodium-binAUR(社區驅動的完全開源的 VSCode 版本,不帶微軟附屬和遙測功能,二進制包)
- vscodium-gitAUR (社區驅動的完全開源的 VSCode 版本,不帶微軟附屬和遙測功能,最新的開發版)
這些不同的版本都是基於Code - OSS構建的, 但具有不同的許可證和默認配置。值得注意的是,只有專有版本被允許使用官方拓展市場並使用微軟的專有擴展,例如OmniSharp C# Debugger。後者通過握手機制進行驗證,並不能被繞過。有關開源和專有 "Visual Studio Code "構建之間差異的更多信息,請查閱Code - OSS GitHub wiki.
擴展支持[編輯 | 編輯原始碼]
Code 的一個主要特點是其靈活的API和豐富的擴展生態(託管在Visual Studio Marketplace上)。但是,根據Code的擴展商場使用條款,拓展商場只能和微軟官方版本配合使用。因此code包並沒有內置一個預配置的拓展商場,雖然它支持Open VSX registry,但其並不能提供相同範圍的擴展。
已知的解決方法:
- 從Microsoft Visual Studio Code Marketplace中下載擴展的
.vsix
文件並手動安裝,你可以使用命令
code --install-extension <插件名>.vsix
來安裝 .vsix
文件;
- 請求開發者將擴展上傳至Open VSX registry;
- 根據你使用的版本,安裝對應的包來接入官方拓展市場:code-marketplaceAUR/vscodium-bin-marketplaceAUR/vscodium-marketplaceAUR/vscodium-electron-marketplaceAUR。這些軟件包包含一個 pacman 鈎子,在每次更新後會根據Github comment來更新
product.json
文件。
product.json
文件時,你可以設置一個的快捷鍵 更為快捷地重新加載IDE使用[編輯 | 編輯原始碼]
對於以下版本,運行code
或code --no-sandbox
即可啟動:
對於以下版本,運行code-git
即可啟動:
- code-gitAUR
對於以下版本,運行codium
即可啟動:
- vscodium-binAUR/vscodiumAUR/vscodium-gitAUR/vscodium-electronAUR
如果你想打開多個實例,可以使用-n
選項。
配置[編輯 | 編輯原始碼]
- 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
可以配置默認終端,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"
在Wayland下原生運行[編輯 | 編輯原始碼]
Code使用了Electron,你可以參照Wayland#Electron設置來讓其在Wayland下原生運行。請注意,某些版本的應用會使用自帶的Electron(而不是系統的Electron),這種情況下應用將不會讀取全局配置文件,你需要對環境變量進行修改(而不是全局配置文件)。
使用用戶配置文件時,visual-studio-code-binAUR和code包都會讀取~/.config/code-flags.conf
處的配置文件。這僅針對這些包及其衍生版本,因為它們使用修改過的加載腳本來讀取。
如果使用的是vscodium-binAUR, 其會加載~/.config/codium-flags.conf
處的配置文件。注意從終端運行時,使用codium
(而不是vscodium
), 否則它將不會在Wayland下原生啟動。
vscodiumAUR不會讀取配置文件(因為它沒有使用加載腳本)。其提供了一個桌面項文件 vscodium-wayland.desktop
以在Wayland下原生運行,在菜單中顯示為"VSCodium - Wayland"。
原生文件對話框[編輯 | 編輯原始碼]
如果你使用KDE/Plasma, 默認情況下VS Codium將會打開GTK文件對話框。請確保您已經安裝了KDE桌面門戶(xdg-desktop-portal-kde包),並將環境變量設置為GTK_USE_PORTAL=1
來解決這個問題。
疑難解答[編輯 | 編輯原始碼]
KDE/Plasma 全局菜單失效[編輯 | 編輯原始碼]
Visual Studio Code使用DBus傳遞菜單,嘗試安裝 libdbusmenu-glib包。[2]
無法將內容移至回收站[編輯 | 編輯原始碼]
默認狀態下,Electron使用gio
刪除文件。如果檢測到Plasma將會自動設置為使用kioclient5
刪除文件。不同的回收站實現可以通過設置ELECTRON_TRASH
環境變量來使用。
例如,要使用trash-cli包刪除文件:
$ ELECTRON_TRASH=trash-cli code
這樣一來,Electron就支持了kioclient5
,kioclient
,trash-cli
,gio
(默認)和gvfs-trash
(不推薦)。詳情可在此查看documentation page。
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" } ...
無法使用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中提到了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"
。
使用「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
在Code - OSS與VSCodium中是缺失的,儘管這似乎不是由於許可問題。這可能導致一些插件無法正常工作(例如Live Share)。但和強制打開官方拓展商場不同的是,這個解決方案得到了微軟的認可[3]。
您可以嘗試通過安裝一個pacman 鈎子來解決,它將會在每次包更新時修補文件:
- 對於 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拉取請求中所說的。
[編輯 | 編輯原始碼]
要麼使用上述解決方案編輯product.json
,要麼使用如下命令打開VS Code:
$ code --enable-proposed-api ms-vsliveshare.vsliveshare
另請注意,為了使此擴展程序正常工作,您需要安裝在這裏列出的依賴項[5]。
指令'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密匙加密且無法使用SSH agent造成的,參見這個問題報告。您可以嘗試安裝一個配置解釋器(dialogue provider),例如SSH keys#x11-ssh-askpass或者其他的代替方案(例如,對於KDE用戶您可以嘗試使用ksshaskpass包)。
對於ksshaskpass,為了讓Code找到它,您需要將其連結到/usr/lib/ssh/ssh-askpass
:
# ln /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass
GIT_ASKPASS=ksshaskpass SSH_ASKPASS=ksshaskpass SSH_ASKPASS_REQUIRE=prefer
為了禁用Code內置的git-askpass, 請在以下文件中添加:
~/.config/Code - OSS/User/settings.json
{ "git.useIntegratedAskPass": false }
終端中的截斷字符[編輯 | 編輯原始碼]
太寬的字符可能會被截斷。例如Deno堆棧跟蹤中使用的斜體粗體文本。
你可以將"terminal.integrated.rendererType"設置為"experimentalWebgl"來解決這個問題。
運行在Wayland下出現字體模糊[編輯 | 編輯原始碼]
Code默認會在Xwayland下運行,如果你使用HiDPI屏幕,可能會有字體模糊的問題。你可以嘗試讓Electron強制在Wayland下運行——參見#在Wayland下原生運行。
或者如你的Wayland環境提供了運行未縮放的Xwayland應用程式的選項,你可以繞過這個問題。你可以附帶參數--force-device-scale-factor=
來運行Code,手動指定其縮放比例。
例如,將縮放比例設置成2:
$ code --force-device-scale-factor=2
找不到接口「org.freedesktop.Secret.Collection」[編輯 | 編輯原始碼]
參見Code官方文檔settings-sync#_troubleshooting-keychain-issues。
使用VSCodium時無法進行Github身份驗證[編輯 | 編輯原始碼]
參照這個Github評論,當要連接到Github時,將彈出的網址中的"vscodium"改為"vscode",隨後將識別令牌(identification token)拷貝到VSCodium中。如果還是不成功,你可以嘗試安裝一個密鑰環,例如gnome-keyring包,或者你也可以參照Code官方文檔與這個Github連結來自己創建一個密鑰環。
如果遇到登錄賬戶後會自動退出的情況,你也可以嘗試安裝密匙環gnome-keyring包來解決這個問題,如果你使用的是KDE,可能還需要安裝qtkeychain-qt5包[7]。
找不到密鑰環「An OS keyring couldn't be identified」[編輯 | 編輯原始碼]
在一些桌面環境上(例如i3),Code可能會找不到密鑰環。你需要手動指定Code使用的密匙環,例如gnome-keyring,在以下文件中添加:
~/.vscode-oss/argv.json
{ ... "password-store": "gnome-libsecret", }
這個文件地址僅適用於code包包,如果你使用的是其他版本的Code,請相應調整argv.json
的目錄。例如,如果安裝的是visual-studio-code-binAUR,其地址應調整為~/.vscode/argv.json
。
無法進行粘貼[編輯 | 編輯原始碼]
code包 1.95.0+ 版本運行在 32.2.8+ 版本的 electron 上時,已知存在粘貼不起作用的問題(參見上游問題以及AL 問題)。
兩種可能的解決方法:
- 移除
editor.action.clipboardPasteAction
鍵盤快捷鍵。 - 降級 electron32包 到 32.2.8 版本。