web-dev-qa-db-ja.com

Powershellプロンプトに色を付ける方法は?

私はいつも私のLinuxでプロンプトをこの色にしています  その後、黒いコマンドウィンドウで入力を見つけることができます。しかし、Powershellで同じ色を作成できますか?

18
yode

screenshot of coloured Prompt

PowerShellプロンプト

あなたがしたいのは、 プロンプト をカスタマイズすることです。

PowerShell 3.0以降のデフォルトのプロンプトは次のとおりです。

_function Prompt  
{  
    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "  
}
_

カラーエスケープシーケンス

現在、Windows 10 supportsANSIエスケープコード がコンホストに含まれ、 24ビットカラー は1703以降サポートされています。

ANSIエスケープコードの1つを使用するには、リテラル ESC文字 が必要です。これは8進数の033または10進数の27です。Bashでは、_"\033"_または_"\e"_を使用します。 PowerShellには直接対応するシーケンスはありませんが、代わりに式を埋め込むことができます:"$([char]27)"

PowerShell Coreでは、代わりに_"`e"_エスケープシーケンスを使用できます。 asherberによるコメントに感謝します。


PowerShellで使用する

つまり、たとえば、次のエスケープシーケンスを使用して、コード_46_で背景色をシアンに設定できます。

_"$([char]27)[46m"
_

これは次のように使用できます:

_echo "$([char]27)[46mColoured text"
_

読みやすくするために、変数を定義しましょう。

_$ESC = [char]27
_

したがって、以下を使用できます。

_"$ESC[46m"
_

ここで、_$ESC_はリテラルESC文字、_[_はパラメーターリストの開始を定義し、mは終了を定義します。

コマンドでの使用:

_echo "$ESC[46mColoured text"
_

元の色設定を復元するには、代わりにコード_0_を使用します。

_echo "$ESC[46mColoured text$ESC[0mUncoloured text"
_

より高度な色

基本的な16色パレットに満足できない場合は、次の形式でフル24ビット色を使用できます。

_"$ESC[48;2;<r>;<g>;<b>m"
_

ここで、_<r>_は0から255までの赤の10進値、緑は_<g>_、青は_<b>_です。 _"$ESC[48;2;255;0;123m"_

詳細は documentation を参照してください。

実際、これは、_$ESC_または_\e_の代わりに_\033_(定義した後)を使用する必要があることを除いて、bashで行うこととまったく同じです。


色付きプロンプトの設定

これらをまとめると、変更されたプロンプトでANSIカラーエスケープコードを使用して、背景色を変更できます。

_function Prompt  
{  
    $ESC = [char]27
    "$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"  
}
_

持続性

これをセッション全体で維持したい場合は、プロファイルに追加します(_.bashrc_など)。プロファイルへのパスは_$profile_で確認できます。

33
Bob