Dlaczego znak procentu pojawia się przed każdym monitem w Zsh w Windows?

13

Dostaję konfigurację zsh w Windows i otrzymuję symbol odwrotnej (czarno na białym (czarne tło terminala)) symbolu procentowego w pierwszej pozycji znaku w linii tuż nad każdym monitem.

Zwykle oznacza to, że na końcu pliku nie ma nowego wiersza, na przykład podczas catotwierania pliku.

Nie dzieje się to na moim komputerze Mac ani nawet w Mintty w systemie Windows. Ale zdarza się to w ConEmu i standardowej aplikacji terminalowej, w której zwykle działa CMD.EXE.

Mam już unsetwszystkie moje ciągi znaków zachęty, precmd()których zwykle używam do dodania pustej linii powyżej pytania.

Wiesz, co to może być?

skąpy
źródło

Odpowiedzi:

33

Odpowiednią opcją jest prawdopodobnie PROMPT_SPwyjaśnienie z instrukcji

Próba zachowania częściowej linii (tj. Linii, która nie kończy się nową linią), która w innym przypadku byłaby objęta wierszem poleceń z powodu opcji PROMPT_CR. Działa to poprzez wyprowadzenie niektórych znaków sterujących kursorem, w tym szeregu spacji, które powinny sprawić, że terminal zawinie się do następnego wiersza, gdy obecna jest linia częściowa (zauważ, że jest to skuteczne tylko wtedy, gdy twój terminal ma automatyczne marginesy, co jest typowe) .

Gdy zachowana jest linia częściowa, domyślnie na końcu linii częściowej widoczny jest znak odwrotny + pogrubiony: a %dla zwykłego użytkownika lub #dla użytkownika root. Jeśli jest ustawiony, parametr powłoki PROMPT_EOL_MARK można wykorzystać do dostosowania sposobu wyświetlania końca linii częściowych.

Więc albo zrobisz

unsetopt PROMPT_SP

jeśli nie przejmujesz się zakrytą linią (jednak w twoim przypadku wydaje się, że jest to pusta linia, ponieważ dostajesz %znak na początku).

Albo użyj

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

który zachowuje częściowe wiersze, ale usuwa %- kosztem niektórych pustych wierszy w wierszu polecenia.

Aby to zrobić na stałe, zaktualizuj swój ~/.zshrc.

To ślepy strzał, ponieważ nie mogę odtworzyć tego zachowania w moim przypadku cmd.exe.

mpy
źródło
1
Dzięki @mpy, znalazłem się we właściwym miejscu, aby dowiedzieć się więcej. Oto, co wymyśliłem: 1) trzy rzeczy działają, więcej, jeśli połączysz opcje: unsetopt PROMPT_CR; unsetopt PROMPT_SP; i PROMPT_EOL_MARK = "". 2) ustawienie PROMPT_EOL_MARK = "" pozbywa się irytującego odwrotnego + pogrubionego znaku "%", ale nadal dodaje dodatkowe przejście do wiersza, więc monit wygląda inaczej niż na miętowym lub Macu. 3) Skończyło się na tym, że wybrałem opcję unsetopt PROMPT_SP jako najlepszy kompromis. 4) użycie set i unset nie działa, chyba że użyjesz opcji -o. praca setopt i unsetopt. Jeśli to naprawisz, zaakceptuję twoją odpowiedź :)
scanny 15.09.13
@scanny: Muszę przeprosić za set. Oczywiście tak powinno być setopt- oczywiście napisałem swoją odpowiedź zbyt szybko. Zaktualizowałem swoją odpowiedź i starałem się uwzględnić także kwestię pustych linii.
mpy
2

Miałem więc dokładnie ten sam problem z moim zsh + oh-my-zsh.

Naprawiłem to przy pomocy mpy i tych linii:

setopt PROMPT_CR

setopt PROMPT_SP

eksport PROMPT_EOL_MARK = ""

Musisz tylko przejść do -> ~ / .oh-my-zsh / themes / XXXXXX Musisz otworzyć motyw, którego używasz na oh-my-zsh, więc dla mnie na przykład jego agnoster.

Wystarczy otworzyć ten plik i skopiować / ominąć te 3 wiersze na końcu pliku.

I to naprawione !!

Mam nadzieję, że masz miły dzień i że to pomoże niektórym ludziom wyjść.

POKÓJ

Mathieu Stahl-vogt
źródło
Nie dodawaj „dziękuję” jako odpowiedzi. Zainwestuj trochę czasu na stronie, a zyskasz wystarczające uprawnienia do głosowania na odpowiedzi, które Ci się podobają, co jest sposobem Super Użytkownik na podziękowanie.
DavidPostill
0

Możesz uruchomić mięty w ConEmu. To dla mnie pozbawiło procenty.

Oto, co mam dla parametrów zadania:

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

i polecenia:

set CHERE_INVOKING=1 & %ConEmuDrive%\\msys64\usr\bin\mintty.exe -i "%ConEmuDrive%\msys64\msys2.ico" -
Bill Burdick
źródło