I have set up my bash shell so that any commands I type appear in bold and the commands' output is shown in normal weight:

enter image description here

I did this by adding \e[01m at the end of my PS1 variable to turn on bold, and using trap DEBUG to turn it off:

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

That way, the \e[0m is printed before each command is executed and I get normal font weight in the output.

How would I go about getting the same effect in zsh?


The old-fashioned way was to use POSTEDIT


(and by the way this isn't bash, don't use a DEBUG trap to simulate preexec: zsh is where it's from) but since zsh 4.3.11 you can use the command line syntax highlighting facility. Let your prompt care only about your prompt and set

|improve this answer|||||

What you want is preexec hook function:

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

Then before each command was executed, preexec will be run to reset your font to normal.

So, to get the same prompt you show in your question, add these lines to your ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg_bold[yellow]%}%n@%m %{$fg[blue]%}%~ \$ %{$reset_color%}%{$fg_bold[white]%}"
preexec() { printf "\e[0m"; }
|improve this answer|||||
  • That's the right thing to use instead of a DEBUG trap, but neither is the right way to make the command line bold. – Gilles 'SO- stop being evil' Nov 1 '15 at 0:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.