Como colorir o prompt do Powershell?

17

Eu sempre solicito que seja desta cor no meu linux. Então, encontro minha entrada na janela de comando preta. Mas podemos fazer a mesma cor no meu PowerShell ?

yode
fonte
Qual é a fonte do console?
Dmitry Kudriavtsev
@DmitryKudriavtsev Veja isso , talvez seja a música do Sim em inglês.
yode
Talvez seja SimSun?
Dmitry Kudriavtsev
@DmitryKudriavtsev Sim, desculpe, eu cometi um erro.
yode
a culpa não é sua, a transliteração é difícil #
687 Dmitry Kudriavtsev 17/10

Respostas:

32

captura de tela do prompt colorido

Prompts do PowerShell

O que você deseja fazer é personalizar o prompt .

O prompt padrão no PowerShell 3.0 e mais recente é:

function prompt  
{  
    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "  
}

Sequências de escape de cores

Agora, o Windows 10 suporta os códigos de escape ANSI em seu estado conhecido e as cores de 24 bits são suportadas desde 1703.

Para usar um dos códigos de escape ANSI, precisamos de um caractere ESC literal . Este é octal 033 ou decimal 27. No Bash, você usaria "\033"or "\e"; Não há sequência equivalente direta no PowerShell, mas você pode incorporar uma expressão:"$([char]27)"

No PowerShell Core, você pode usar a "`e"sequência de escape. Graças ao comentário de asherber.


Use no PowerShell

Isso significa que você pode, por exemplo, usar a seguinte seqüência de escape para definir a cor do plano de fundo como ciano com o código 46 :

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

Que pode ser usado assim:

echo "$([char]27)[46mColoured text"

Para tornar as coisas mais legíveis, vamos definir uma variável:

$ESC = [char]27

Para que possamos usar:

"$ESC[46m"

Onde $ESC está o caractere ESC literal, [define o início da lista de parâmetros e mo final.

Utilizando-o em um comando:

echo "$ESC[46mColoured text"

E para restaurar as configurações de cores originais, usamos o código 0 :

echo "$ESC[46mColoured text$ESC[0mUncoloured text"

Cores mais avançadas

Se você não estiver satisfeito com a paleta básica de 16 cores, poderá usar cores completas de 24 bits com o seguinte formato:

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

Onde <r>é o valor decimal para vermelho de 0 a 255, <g>para verde e<b> azul, por exemplo"$ESC[48;2;255;0;123m"

Por favor, consulte o documentação para mais informações.

De fato, tudo isso é diretamente equivalente ao que você faria no bash, exceto que você precisa usar $ESC(depois de defini-lo) em vez de \eou\033 .


Definindo um prompt colorido

Juntando tudo isso, podemos usar os códigos de escape de cores ANSI em um prompt modificado para alterar a cor de fundo:

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

Persistência

Se você deseja que isso persista nas sessões, adicione-o ao seu perfil (como .bashrc). Você pode ver o caminho para o seu perfil $profile.

Prumo
fonte
Oi ~, é um grande answer..But ainda mais, poderíamos fazer o texto estar estilo arrojado Então, podemos encontrá-lo mais fácil ..?
yode
11
@yode É mais ou menos tudo documentado aqui , que eu ligado na resposta;)
Bob
11
@yode Ah. Se você comparar com 37 brancos não brilhantes, parece que as janelas do PowerShell já usam 97 branco brilhante por padrão. (btw, haverá uma nova paleta de cores para instalações limpas da próxima versão do Win10. Existem algumas capturas de tela da paleta atual ; observe que 1;37mé o mesmo que 97m, ambas significando "branco brilhante")
Bob
11
@yode Basicamente, o conhecost ainda não suporta negrito. Brilhante é um substituto para negrito, e você já está usando a cor brilhante por padrão. Se você realmente deseja negrito, pode usar um terminal alternativo, como o ConEmu - mas parece que o suporte ao ANSI negrito também não está completo. OMI, não vale a pena.
Bob
11
Não consigo fazer o Markdown funcionar corretamente, mas no PowerShell Core você pode usar o backtick + e para [char]27. Não tenho certeza se isso foi adicionado em versões anteriores.
asherber