Wie kann ich Befehle in zsh fett darstellen?

18

Ich habe meine Bash-Shell so eingerichtet, dass alle von mir eingegebenen Befehle fett dargestellt werden und die Ausgabe der Befehle in normaler Gewichtung angezeigt wird:

Bildbeschreibung hier eingeben

Ich tat dies, indem ich \e[01mam Ende meiner PS1Variablen hinzufügte , um fett zu aktivieren, und trap DEBUGes mit deaktivierte:

trap 'printf "\e[0m" "$_"' DEBUG

Auf diese Weise wird das \e[0mgedruckt, bevor jeder Befehl ausgeführt wird, und ich erhalte die normale Schriftstärke in der Ausgabe.

Wie würde ich vorgehen, um den gleichen Effekt zu erzielen zsh?

terdon
quelle

Antworten:

13

Der altmodische Weg war zu benutzen POSTEDIT

 POSTEDIT=$'\e[0m'

( Übrigens ist dies keine Bash, verwenden Sie keine DEBUG-Trap, um zu simulieren preexec: zsh ist der Ursprung), aber seit zsh 4.3.11 können Sie die Befehlszeilensyntax- Hervorhebungsfunktion verwenden . Lassen Sie Ihre Eingabeaufforderung nur auf Ihre Eingabeaufforderung achten und einstellen

zle_highlight=(default:bold)
Gilles 'SO - hör auf böse zu sein'
quelle
7

Was Sie wollen, ist die Preexec-Hook-Funktion :

preexec() { printf "\e[0m"; }

Dann, bevor jeder Befehl ausgeführt wurde, preexecwird ausgeführt, um Ihre Schriftart auf den Normalwert zurückzusetzen.

Um die gleiche Eingabeaufforderung zu erhalten, die Sie in Ihrer Frage angezeigt haben, fügen Sie folgende Zeilen zu Ihrer hinzu ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg_bold[yellow]%}%n@%m %{$fg[blue]%}%~ \$ %{$reset_color%}%{$fg_bold[white]%}"
preexec() { printf "\e[0m"; }
cuonglm
quelle
Das ist das Richtige anstelle einer DEBUG-Falle, aber auch nicht das Richtige, um die Befehlszeile fett zu machen.
Gilles 'SO- hör auf böse zu sein'