🐍
PowerShell でホームディレクトリを省略する
PowerShell はデフォルトで現在のフルパスを表示しますが、Bash のようにホームディレクトリを ~
で置き換えてほしかったのでカスタマイズしてみました。
Profile の準備
Bash でいう .bashrc
のように、起動時に読み込まれるファイルに任意の処理を書くことで色々とカスタマイズできます。ただデフォルトでは存在しないので、touch $profile
などで作成する必要があります。
カスタマイズ
見た目に関する処理は prompt
関数に書きます。
デフォルトではこんな感じです。
function prompt {
$(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
else { '' }) + 'PS ' + $(Get-Location) +
$(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}
参考:プロンプトについて - PowerShell | Microsoft Docs
カレントディレクトリの取得に $(Get-Location)
が使われていますが、これだと文字列として扱うことができません($pwd
も同様)。そこで Convert-Path
を使います。
Microsoft.PowerShell_profile.ps1
function prompt {
$currentDir = (Convert-Path .)
$(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
else { '' }) + 'PS ' + $currentDir +
$(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}
これで文字列として扱えるようになりました。あとは $home
が含まれているかチェックして置換するだけです。
Microsoft.PowerShell_profile.ps1
function prompt {
$currentDir = (Convert-Path .)
if ($currentDir.Contains($HOME)) {
$currentDir = $currentDir.Replace($HOME, "~")
}
$(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
else { '' }) + 'PS ' + $currentDir +
$(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}
あとがき
今回はちょっと表示をいじっただけですが、他にも色々できるので試してみてください。
参考までに僕のリポジトリを置いておきます。
Discussion