wake-up-neo.net

OS X Terminal Text Stacking auf sich selbst

Ich habe in der Terminal-App in Mac OS X Lion ein seltsames Problem. Wenn ich eine lange Textzeile eingebe, die in die nächste Zeile umgebrochen werden soll, wenn sie den Rand des Terminalfensters erreicht, tippt sie weiterhin über dem Text in der darüber liegenden Zeile.

Hier sind einige Screenshots, um das Problem zu veranschaulichen:

Bevor mein Text den Fensterrand erreicht:

before

Nachdem der Text den Fensterrand erreicht hat:

after

Ich habe auch Screenshots meiner Text- und Fenstereinstellungen bereitgestellt, falls diese hilfreich sein könnten.

Texteinstellungen:

text

Fenstereinstellungen:

window

Vielen Dank im Voraus für jegliche Hilfe. Ich hatte dieses Problem schon eine Weile und bin einfach nie dazu gekommen. Es ist jetzt wirklich ein Schmerz im Arsch, wenn ich auf Dinge stoße, die große Grep-Befehle und lange Pfadnamen erfordern.

41
Daryn

Die Umgebungsvariable PS1 bestimmt, wie die Eingabeaufforderung von Shell aussehen wird. man bash enthält vollständige Dokumentation darüber. (Es gibt tatsächlich mehrere davon für verschiedene Modi).

Es gibt eine Anzahl von Dateien, die es einstellen können, normalerweise eine von ~/.profile, ~/.bashrc, /etc/profile oder /etc/bashrc.

Wenn Sie Farbcodes oder andere Steuersequenzen enthalten, müssen Sie sie mit \[ und \] korrekt umschließen (und NICHT normalen Text umbrechen), da sonst die Zeilenbearbeitung wie in Ihrem Fall durcheinander geraten kann. Ich schlage vor, PS1 auf den Standardwert zurückzusetzen und dann die Farbe einzeln nach und nach hinzuzufügen.

Zum Beispiel:

PS1='\[\033[1m\033[32m\]\[email protected]\h \w\[\033[0m\]\$ '
       ^^^^^^^^^^^^^^^            ^^^^^^^

Farbbefehle sind unterstrichen. Beachten Sie, wie sie mit \[ \] umgeben sind.

58
hamstergene

Ich habe das gleiche Problem, das ich gefunden habe, wenn Sie sich ändern 

Erweitert> Emulation> Terminal als ANSI deklarieren.

Dies löst ein farbiges PS1-Problem. Mit Mac-Terminal

ABER erzeugt ein seltsames Verhalten: Ich habe mit @koiyu eine Lösung für mein Problem gefunden.

https://Apple.stackexchange.com/questions/37001/strange-behavior-in-terminal-with-custom-bash-profile/37036#37036

7
guneysus

Ich hatte das gleiche Problem, weil ich Farbcodes falsch verwendet habe. Hier ist meine PS1, die das Problem gelöst hat. Wenn Sie GIT verwenden, ist dies auch hilfreich, um den git-Zweig anzuzeigen, an dem Sie arbeiten, und ob Ihr Arbeitsbaum schmutzig ist oder nicht. Fügen Sie dies in Ihr .profile oder .bash_profile ein

# Git branch in Prompt.
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

parse_git_dirty() {
    st=$(git status 2>/dev/null | tail -n 1)
    if [[ $st == "" ]]; then
        echo ''
    Elif [[ $st == "nothing to commit (working directory clean)" ]]; then
        echo ''
    Elif [[ $st == 'nothing added to commit but untracked files present (use "git add" to track)' ]]; then
        echo '?'
    else
        echo '*'
    fi
}

# coloring the terminal comman line
SB_GREEN="\[\033[1;32m\]"
SB_BLUE="\[\033[1;34m\]"
SB_RED="\[\033[1;31m\]"
SB_NOCOLOR="\[\033[0m\]"
export PS1="$SB_GREEN\[email protected]\h$SB_NOCOLOR: $SB_BLUE\w$SB_GREEN\$(parse_git_branch)$SB_RED\$(parse_git_dirty)$SB_NOCOLOR $ "

Hoffe das hilft.

5
Jazzer

Mit der Anleitung von hamstergene konnte ich herausfinden, wie man Nizza spielt. Mit diesem Geek Stuff-Handbuch und dies ist es Tommy-Tutorial konnte ich definieren, wie ich meinen PS1-Text anzeigen wollte. Die Änderung in etwas viel vereinfachteres hat das seltsame, überlappende Textproblem, das ich hatte, beseitigt.

Vor:

before

Nach dem:

after

Ich habe einfach meinen .bash_profile bearbeitet und die folgende Zeile hinzugefügt:

export PS1="[\[email protected]\h] > ";

Dann ging ich und änderte die Fensterfarben für ein gutes Maß, weil ich kann.

1
Daryn

Wie andere bereits gesagt haben, müssen Sie Ihre Farbbefehle ordnungsgemäß in eckige Klammern setzen. Für mich ist die Saite jedoch sehr, sehr verwirrend anzusehen!

Als solches ist hier ein Trick, den ich benutze, um es immer richtig zu machen und es auch viel lesbarer zu machen.

Ich erstelle zuerst eine Shell-Funktion namens setColor wie folgt ...

setColor(){
    echo "\[\033[${1}m\]"
}

Dann benutze ich es so ...

PS1="$(setColor 92)\u$(setColor 37):$(setColor 96)\w $(setColor)\$ "

Das ist das Gleiche wie dies zu schreiben ...

\[\033[92m\]\u\[\033[37m\]:\[\033[96m\]\w \[\033[m\]$

... aber wie Sie sehen, ist ersteres viel klarer und garantiert auch, dass alles richtig entkommen ist.

Beachten Sie, dass Sie mit dem Zeichen ; Auch mehrere Farben angeben können. Das Einzige, was Sie tun müssen, ist, dass Sie explizit entkommen müssen, damit 92;41 Wie folgt zu 92\;41 Wird ...

PS1="$(setColor 92\;41)\u$(setColor 37):$(setColor 96)\w $(setColor)\$ "

Auch hier noch einfacher zu lesen ...

\[\033[92;41m\]\u\[\033[37m\]:\[\033[96m\]\w \[\033[m\]$

Sie können noch einen Schritt weiter gehen, indem Sie Konstanten für die Farben definieren oder sogar 'Wrapper'-Funktionen mit den Farbnamen, die Sie am häufigsten verwenden. So können Sie Folgendes schreiben:.

PS1="$(setRed)\u$(setBlue):$(setGreen)\w $(resetColor)\$ "

Hoffe das hilft!

0
MarqueIV

Das ursprüngliche Problem war, dass es eine neue Zeile in der PS1 gab (FYI für alle, die in diese Richtung laufen).

Normalerweise werden die Farbcodes nicht ordnungsgemäß maskiert, aber wenn nicht, haben Sie eine neue Zeile in Ihrem PS1

0
DebugXYZ