Por que um sinal de porcentagem aparece antes de cada prompt no zsh no Windows?

13

Estou configurando o zsh no Windows e obtendo um símbolo de porcentagem reversa (preto sobre branco (fundo preto do terminal)) na posição do primeiro caractere na linha logo acima de cada prompt.

Normalmente, isso significa que não há nova linha no final do arquivo, por exemplo, ao catinserir um arquivo.

Isso não acontece no meu Mac ou mesmo no Mintty no Windows. Mas isso acontece no ConEmu e no aplicativo de terminal padrão em que o CMD.EXE geralmente é executado.

Eu já tenho unsettodas as minhas strings de prompt e as precmd()que normalmente uso para adicionar uma linha em branco acima do prompt.

Alguma pista do que poderia ser?

scanny
fonte

Respostas:

33

A opção relevante provavelmente é a PROMPT_SPexplicação do manual

Tente preservar uma linha parcial (ou seja, uma linha que não termina com uma nova linha) que, de outra forma, seria coberta pelo prompt de comando devido à opção PROMPT_CR. Isso funciona com a saída de alguns caracteres de controle do cursor, incluindo uma série de espaços, que devem fazer o terminal quebrar para a próxima linha quando uma linha parcial estiver presente (observe que isso só será bem-sucedido se o seu terminal tiver margens automáticas, o que é típico) .

Quando uma linha parcial é preservada, por padrão, você verá um caractere inverso + negrito no final da linha parcial: a %para um usuário normal ou #para raiz. Se definido, o parâmetro shell PROMPT_EOL_MARK pode ser usado para personalizar como o final das linhas parciais é mostrado.

Então, ou você faz um

unsetopt PROMPT_SP

se você não se importa com a linha encoberta (no entanto, no seu caso, parece ser uma linha vazia, pois você recebe a %placa no início).

Ou use

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

que preserva linhas parciais, mas remove o %- ao custo de algumas linhas vazias no prompt.

Para tornar isso permanente, atualize seu ~/.zshrc.

Este é um tiro cego, pois não posso reproduzir esse comportamento no meu cmd.exe.

mpy
fonte
1
Obrigado @mpy, isso me colocou no lugar certo para saber mais. Aqui está o que eu criei: 1) três coisas funcionam, mais se você combinar opções: PROMPT_CR; desarranjo PROMPT_SP; e PROMPT_EOL_MARK = "". 2) definir PROMPT_EOL_MARK = "" se livra do caractere inverso + negrito "%" irritante, mas ainda adiciona um feed de linha adicional, portanto, o prompt parece diferente do que o mintty ou o Mac. 3) Acabei optando pelo PROMPT_SP como o melhor compromisso. 4) o uso de set e unset não funcionará, a menos que você use a opção -o. trabalho setopt e unsopopt. Se você vai consertar Eu vou aceitar a sua resposta :)
scanny
@ Scanny: Eu tenho que me desculpar pelo set. Claro, deveria ter sido setopt- obviamente eu escrevi minha resposta muito rápido. Atualizei minha resposta e tentei incluir também o ponto sobre as linhas vazias.
mpy
2

Então, eu estava tendo exatamente o mesmo problema com o meu zsh + oh-my-zsh.

Corrigi-o com a ajuda de mpy e essas linhas:

setopt PROMPT_CR

setopt PROMPT_SP

exportar PROMPT_EOL_MARK = ""

Você só precisa ir para -> ~ / .oh-my-zsh / themes / XXXXXX Você precisa abrir o tema que está usando no oh-my-zsh, para mim, por exemplo, seu agnoster.

Basta abrir este arquivo e copiar / colar essas 3 linhas no final do arquivo.

E é fixo !!

Espero que você tenha um bom dia e que isso ajude algumas pessoas.

PAZ

Mathieu Stahl-vogt
fonte
Por favor, não adicione "obrigado" como respostas. Invista algum tempo no site e você obterá privilégios suficientes para votar de imediato as respostas que desejar, que é a maneira do Superusuário de dizer obrigado.
DavidPostill
0

Você pode executar hortelã dentro do ConEmu. Isso se livrou das porcentagens para mim.

Aqui está o que eu tenho para os parâmetros da tarefa:

/icon "%ConEmuDrive%\msys64\msys2.ico"

e comandos:

set CHERE_INVOKING=1 & %ConEmuDrive%\\msys64\usr\bin\mintty.exe -i "%ConEmuDrive%\msys64\msys2.ico" -
Bill Burdick
fonte