Pourquoi un signe de pourcentage apparaît avant chaque invite sur zsh dans Windows?

13

Je configure zsh dans Windows et j'obtiens un symbole de pourcentage inversé (noir sur blanc (arrière-plan du terminal noir)) au premier caractère de la ligne juste au-dessus de chaque invite.

Cela signifie généralement qu'il n'y a pas de nouvelle ligne à la fin du fichier, par exemple lors de la catsaisie d'un fichier.

Cela ne se produit pas sur mon Mac ou même sur Mintty sous Windows. Mais cela se produit dans ConEmu et dans l'application de terminal standard dans laquelle CMD.EXE s'exécute généralement.

J'ai déjà unsettoutes mes chaînes d'invite ainsi que celles precmd()que j'utilise normalement pour ajouter une ligne vierge au-dessus de l'invite.

Une idée de ce que ça pourrait être?

scanny
la source

Réponses:

33

L'option pertinente est probablement PROMPT_SP, explication du manuel

Essayez de conserver une ligne partielle (c'est-à-dire une ligne qui ne se termine pas par un retour à la ligne) qui autrement serait masquée par l'invite de commande en raison de l'option PROMPT_CR. Cela fonctionne en sortant certains caractères de contrôle du curseur, y compris une série d'espaces, qui devraient faire en sorte que le terminal passe à la ligne suivante lorsqu'une ligne partielle est présente (notez que cela ne réussit que si votre terminal a des marges automatiques, ce qui est typique) .

Lorsqu'une ligne partielle est conservée, par défaut, vous verrez un caractère inverse + gras à la fin de la ligne partielle: a %pour un utilisateur normal ou a #pour root. S'il est défini, le paramètre shell PROMPT_EOL_MARK peut être utilisé pour personnaliser l'affichage de la fin des lignes partielles.

Donc, soit vous faites un

unsetopt PROMPT_SP

si vous ne vous souciez pas de la ligne couverte (cependant, dans votre cas, il semble que ce soit une ligne vide, car vous obtenez le %signe au début).

Ou utiliser

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

qui conserve les lignes partielles, mais supprime le %- au prix de quelques lignes vides sur l'invite.

Pour rendre cela permanent, mettez à jour votre ~/.zshrc.

Ceci est un tir aveugle, car je ne peux pas reproduire ce comportement dans mon cmd.exe.

mpy
la source
1
Merci @mpy, cela m'a mis au bon endroit pour en savoir plus. Voici ce que j'ai trouvé: 1) trois choses fonctionnent, plus si vous combinez des options: unsetopt PROMPT_CR; unsetopt PROMPT_SP; et PROMPT_EOL_MARK = "". 2) la définition de PROMPT_EOL_MARK = "" supprime le caractère ennuyeux inverse + gras "%", mais il ajoute toujours un saut de ligne supplémentaire, donc l'invite semble différente de celle de mintty ou du Mac. 3) J'ai finalement opté pour unsetopt PROMPT_SP comme meilleur compromis. 4) l'utilisation de set et unset ne fonctionne que si vous utilisez l'option -o. setopt et unsetopt travail. Si vous
corrigez,
@scanny: Je dois m'excuser pour le set. Bien sûr, cela aurait dû être setopt- évidemment, j'ai écrit ma réponse trop rapidement. J'ai mis à jour ma réponse et j'ai essayé d'inclure également le point sur les lignes vides.
mpy
2

J'avais donc exactement le même problème avec mon zsh + oh-my-zsh.

Je l'ai corrigé avec l'aide de mpy et de ces lignes:

setopt PROMPT_CR

setopt PROMPT_SP

export PROMPT_EOL_MARK = ""

Il suffit d'aller dans -> ~ / .oh-my-zsh / themes / XXXXXX Il faut ouvrir le thème que vous utilisez sur oh-my-zsh donc pour moi par exemple son agnoster.

Il suffit d'ouvrir ce fichier et de copier / coller ces 3 lignes à la fin du fichier.

Et c'est fixe !!

J'espère que vous avez une bonne journée et que cela aidera certaines personnes.

PAIX

Mathieu Stahl-vogt
la source
Veuillez ne pas ajouter "merci" comme réponses. Investissez un peu de temps dans le site et vous obtiendrez des privilèges suffisants pour voter positivement sur les réponses que vous aimez, ce qui est la façon dont Super User vous remercie.
DavidPostill
0

Vous pouvez exécuter mintty à l'intérieur de ConEmu. Cela m'a débarrassé des pourcentages.

Voici ce que j'ai pour les paramètres de tâche:

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

et commandes:

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