I recently read about this nifty new real-time syntax highlighter: zsh-syntax-highlighting. It looked like it would be pretty handy, so I decided to try it out for a couple of weeks.
It is a bit too colorful out of the box
Too many things are highlighted by default for my tastes. Every correctly typed command, every file name, and every globbing character is highlighted in one way or another. I was especially unhappy with the underlined path names.
Some highlighting is really awesome
I may not like all the extra noise, but there are a few things that I’m finding to be very useful. Highlighting a misspelled command in red is very nice. It is nice to catch typos before trying to execute a command.
Highlighting reserved words should be pretty helpful. I use one-liner
for loops all the time, but I’m very good at leaving out the
do. Highlighting makes that slightly more, obvious but I sure wish the
done would highlight red if it didn’t match a
do. It does match pairs of brackets, though, so maybe I can get in the habit of using those instead of old bash-isms…
It also does a good job of quote highlighting. That will probably help me catch mismatched and unescaped quotes pretty easy.
Customizing colors when using oh-my-zsh
I had a bit of trouble here. I tried setting the color variables in a file in my
~/.oh-my-zsh/custom directory while loading zsh-syntax-highlighting as a plugin from my
~/.oh-my-zsh/plugins directory. When I did, this it was acting like the colors were not already defined. I thought this was a bit strange because
oh-my-zsh loads plugins before it runs anything in
I didn’t investigate this very heavily. I just moved zsh-syntax-highlighting into my
custom directory and loaded it manually.
Here’s what my zsh-syntax-highlighting configuration looks like:
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets) source $ZSH/custom/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ZSH_HIGHLIGHT_STYLES[default]=none ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=red,bold ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=green ZSH_HIGHLIGHT_STYLES[alias]=none ZSH_HIGHLIGHT_STYLES[builtin]=none ZSH_HIGHLIGHT_STYLES[function]=none ZSH_HIGHLIGHT_STYLES[command]=none ZSH_HIGHLIGHT_STYLES[precommand]=none ZSH_HIGHLIGHT_STYLES[commandseparator]=none ZSH_HIGHLIGHT_STYLES[hashed-command]=none ZSH_HIGHLIGHT_STYLES[path]=none ZSH_HIGHLIGHT_STYLES[globbing]=none ZSH_HIGHLIGHT_STYLES[history-expansion]=fg=blue ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=none ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=none ZSH_HIGHLIGHT_STYLES[back-quoted-argument]=none ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg=yellow ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg=yellow ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]=fg=cyan ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]=fg=cyan ZSH_HIGHLIGHT_STYLES[assign]=none
Most of what I did was remove colors.