Warum wird in Windows vor jeder zsh-Eingabeaufforderung ein Prozentzeichen angezeigt?

13

Ich rufe zsh in Windows auf und erhalte an der ersten Zeichenposition in der Zeile direkt über jeder Eingabeaufforderung ein umgekehrtes Prozentzeichen (schwarz auf weiß (schwarzer Terminalhintergrund)).

In der Regel bedeutet dies, dass am Ende der Datei kein Zeilenumbruch steht, z. B. beim cat-en einer Datei.

Es passiert nicht auf meinem Mac oder sogar auf Mintty unter Windows. Es kommt jedoch in ConEmu und der Standard-Terminal-App vor, in der CMD.EXE normalerweise ausgeführt wird.

Ich habe bereits unsetalle meine Eingabeaufforderungszeichenfolgen sowie die, precmd()die ich normalerweise verwende, um eine leere Zeile über der Eingabeaufforderung hinzuzufügen.

Irgendeine Ahnung woran es liegen könnte?

scanny
quelle

Antworten:

33

Die relevante Option ist wahrscheinlich eine PROMPT_SPErklärung aus dem Handbuch

Versuchen Sie, eine Teilzeile (dh eine Zeile, die nicht mit einer neuen Zeile endet) beizubehalten, die ansonsten aufgrund der Option PROMPT_CR von der Eingabeaufforderung verdeckt würde. Dies funktioniert durch die Ausgabe einiger Cursor-Steuerzeichen, einschließlich einer Reihe von Leerzeichen, die das Terminal in die nächste Zeile springen lassen sollen, wenn eine Teilzeile vorhanden ist. .

Wenn eine Teilzeile beibehalten wird, wird am Ende der Teilzeile standardmäßig ein umgekehrtes + fettes Zeichen angezeigt: a %für einen normalen Benutzer oder a #für root. Wenn festgelegt, kann mit dem Shell-Parameter PROMPT_EOL_MARK angepasst werden, wie das Ende von Teilzeilen angezeigt wird.

Also machst du entweder a

unsetopt PROMPT_SP

Wenn Sie sich nicht für die verdeckte Zeile interessieren (in Ihrem Fall scheint es jedoch eine leere Zeile zu sein, da Sie das %Zeichen am Anfang erhalten).

Oder benutze

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

Dadurch werden Teilzeilen beibehalten, aber die %- auf Kosten einiger Leerzeilen über der Eingabeaufforderung entfernt.

Um dies dauerhaft zu machen, aktualisieren Sie Ihre ~/.zshrc.

Dies ist ein blinder Schuss, da ich dieses Verhalten in meinem nicht reproduzieren kann cmd.exe.

mpy
quelle
1
Dank @mpy, das hat mich genau an den richtigen Ort gebracht, um mehr zu erfahren. Folgendes habe ich mir ausgedacht: 1) Drei Dinge funktionieren, mehr, wenn Sie Optionen kombinieren: deaktiviere PROMPT_CR; deaktivieren Sie PROMPT_SP; und PROMPT_EOL_MARK = "". 2) Wenn Sie PROMPT_EOL_MARK = "" einstellen, wird das lästige inverse + fettgedruckte "%" -Zeichen entfernt, es wird jedoch immer noch ein zusätzlicher Zeilenvorschub hinzugefügt, sodass die Eingabeaufforderung anders aussieht als bei Mintty oder Mac. 3) Am Ende habe ich PROMPT_SP als besten Kompromiss deaktiviert. 4) Die Verwendung von set und unset funktioniert nur, wenn Sie die Option -o verwenden. setopt und unsetopt arbeiten. Wenn Sie das
Problem
@scanny: Ich muss mich für das entschuldigen set. Natürlich sollte es so sein setopt- offensichtlich habe ich meine Antwort zu schnell geschrieben. Ich habe meine Antwort aktualisiert und versucht, auch den Punkt über die Leerzeilen aufzunehmen.
mpy
2

Also hatte ich genau das gleiche Problem mit meinem zsh + oh-my-zsh.

Ich habe es mit Hilfe von mpy und diesen Zeilen behoben:

setopt PROMPT_CR

setopt PROMPT_SP

export PROMPT_EOL_MARK = ""

Sie müssen nur zu -> ~ / .oh-my-zsh / themes / XXXXXX gehen. Sie müssen das Thema öffnen, das Sie auf oh-my-zsh verwenden, also für mich zum Beispiel den Agnoster.

Öffnen Sie einfach diese Datei und kopieren Sie diese 3 Zeilen am Ende der Datei.

Und es ist behoben !!

Ich hoffe, Sie haben einen schönen Tag und das wird einigen Leuten helfen.

FRIEDEN

Mathieu Stahl-vogt
quelle
Bitte geben Sie als Antwort nicht "Danke" an. Wenn Sie etwas Zeit in die Website investieren, erhalten Sie ausreichende Berechtigungen , um die von Ihnen gewünschten Antworten zu verbessern.
DavidPostill
0

Sie können mintty in ConEmu ausführen. Das hat die Prozente für mich losgeworden.

Folgendes habe ich für Aufgabenparameter:

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

und Befehle:

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