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
docs.microsoft.com
"Prompt" 関数について説明し、カスタム 'Prompt' 関数を作成する方法を示します。

カレントディレクトリの取得に $(Get-Location) が使われていますが、これだと文字列として扱うことができません($pwd も同様)。そこで Convert-Path を使います。

function prompt {
    $currentDir = (Convert-Path .)

    $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
      else { '' }) + 'PS ' + $currentDir +
        $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

これで文字列として扱えるようになりました。あとは $home が含まれているかチェックして置換するだけです。

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) { '>>' }) + '> '
}

あとがき

今回はちょっと表示をいじっただけですが、他にも色々できるので試してみてください。 参考までに僕のリポジトリを置いておきます。

GitHub - Akimon658/pwsh-profile: My PowerShell profile
github.com
My PowerShell profile. Contribute to Akimon658/pwsh-profile development by creating an account on GitHub.