VSCodeでpowershell coreをデフォにしたいけど%USERPROFILE%が使えない
追記: 2021/07/03
"%USERPROFILE%
を${env:USERPROFILE}
に置き換えると普通にいけました。はい。
{
"terminal.integrated.profiles.windows": {
"pwsh": {
"path": ["${env:USERPROFILE}\\scoop\\apps\\pwsh\\current\\pwsh.exe"],
"icon": "terminal-powershell"
},
},
}
追記終わり 以下本文
Windows環境のお話です。
VSCodeで"ctrl + shift + @"を押すと新しい統合ターミナルを開けます。
この時開くターミナルの種類は「既定のターミナル」として設定されていますが、コマンドパレット(ctrl + shift + p)から「ターミナル: 既定のプロファイルの選択」を選ぶと既定のターミナルを選択できます。↓
ところがScoopからPowerShell Core(以下、pwsh)を入れた場合は「既定のシェルを選択」の選択肢に出てこないようです。
そういう場合はsettings.json
にterminal.integrated.profiles.windows
という項目を追加し、pwshを追加してやります。
既にterminal.integrated.profiles.windows
設定を追加している場合は新規にpwshの項目を追加します。
さらにterminal.integrated.defaultProfile.window
設定で既定のプロファイルを指定します。
{
"terminal.integrated.profiles.windows": {
"pwsh": {
"path": [
"C:\\Users\\zenn\\scoop\\apps\\pwsh\\current\\pwsh.exe",
],
"icon": "terminal-powershell"
},
},
"terminal.integrated.defaultProfile.windows": "pwsh"
}
これで既定のプロファイルがpwshになりました。
しかし設定を他のPCと同期している場合、pathのC:\\Users\\zenn
の部分は他のPC環境では異なる場合があります。そうすると他のPCではpwshが起動してくれません。
そこでC:\\Users\\zenn
の部分を%USERPROFILE%
に置き換えてやります。
{
"terminal.integrated.profiles.windows": {
"pwsh": {
"path": [
"%USERPROFILE%\\scoop\\apps\\pwsh\\current\\pwsh.exe",
],
"icon": "terminal-powershell"
},
},
"terminal.integrated.defaultProfile.windows": "pwsh"
}
これで他のPCでも問題なく起動できるぞ、と思いきやこれは正常に動作しません。
これは以下のIssueによると、
I also think that %USERPROFILE% is resolved to the non-existing path C:\WINDOWS\system32\config\systemprofile in VSCode when it is used in the system variables instead of the user variables is relevant to look at. VSCode simply seems to not take user-variables into account which are supposed to overwrite system variables, and instead falls back to the system defaults.
VSCodeは%USERPROFILE%を”C:\WINDOWS\system32\config\systemprofile”に解決してしまうようです。こまりました。(IssueもCloseされてしまった・・・)
解決策
以下のようにして回避しました。
- まずcmdを開く
- cmdが起動したらpwshを起動してcmdを閉じる
以下のようにsettings.jsonを修正します。
{
"terminal.integrated.profiles.windows": {
"pwsh": {
"path": [
// cmdをまず起動
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
// pwshを起動させる. "/c" をつけることでコマンド実行後にcmdは終了.
"args": ["/c", "%USERPROFILE%\\scoop\\apps\\pwsh\\current\\pwsh.exe"],
"icon": "terminal-powershell"
},
"terminal.integrated.defaultProfile.windows": "pwsh"
}
この設定をして新しいターミナルを開くとまず「1: cmd」が開き、次に「2: pwsh」が開きます。その後すぐさまcmdが閉じるので、「1: pwsh」に変わるはずです。
Discussion