I'm using zsh-syntax-highlighting[1] for that, which requires 4.3+, so it will work here.
It's pretty great as a starting point, but it really could use more people writing highlighter plugins for different things. It's on my list of things to figure out how to do eventually.
I know this has been asked thousands times before, but I want to know with this latest release, should I switch from Bash to Zsh now? What features do Zsh offer which are not in Bash?
Currently I'm thinking about the Fish-style syntax highlighting. Fish is really nice, but it's not very compatible with the rest of the shell environment. So I'm back on Bash, but really miss the syntax highlighting. I need some good reasons to switch again...
Completion in Zsh alone made it worthwhile for me. The completion scripts for Zsh are worlds more powerful and complete than anything I've found for Bash.
I've been using fish exclusively for about 2 years, and the only thing I really missed was smart tab-completing multiple directories, like cd l/a/t/b<tab> completing to Library/Application\ Support/TextMate/Bundles even if there's another top-level directory starting with L.
Fish's consistent syntax for conditionals/loops is what brought me over in the first place, I always needed to work to remember what goes where in zsh/bash. For one-off tasks the reduction in mental overhead was a _huge_ win.
That said, I recently did switch back to zsh for a functional command-not-found handler - fish's only includes the name of the binary rather than the whole command, so I couldn't productively use it as a retry wrapper.
Definitely this. I switched to Fish for a while and was very happy, but the lack of Bash compatibility got a very old after a while. You never think about how much out there assumes you have a sh/bash-compatible shell running, and watching ordinary tasks fail hard because of an incompatible shell gets very, very frustrating.
The problem I have with zsh is that I don't really notice any benefits from it after switching from bash or whatever. I guess my problem is that I'm still using it like bash, which probably isn't a bad thing but I'm probably missing out on the other features it has.
Thing is there's no real feature I've noticed that made me think "Wow! How did I live without this?". Yeah I see some nice things but they feel like party tricks rather than game changing features.
I dunno, maybe I'm not seeing the big picture here. Is there anything out there that'll show what amazing things that zsh can do? Like is there anything out there that could make me stop using it like bash?
My favourite feature is shared command line history among all open shells. It was my "how I lived without that" feature, and one which I use a lot. Of course, it's only useful if you use the shell for extended periods.
The glob features are certainly quite useful too, for example, if there's a file nested deep inside some directory I can just enter
This is not an attempt to argue with your feature list. Bash clearly doesn't do some of those. But I just noticed the for one-liners you mentioned. I do that in bash alot actually. This is just fyi for anyone reading, not trying to argue with your feature list.
for f in *.py; do wc -l $f; done
also, you can do something like
for f in `find project_name`; do wc -l $f; done t work on the output of another command.
Erm.. ok? If you don't mind me asking, why would I want to look at that? I can't really tell what it can do for me other than "make zsh more awesome". How? How does it make it more awesome?
The thing I liked about oh-my-zsh when I switched from another shell was that it provided a wide variety of pre-built "plugin" scripts for customizing the shell for various environments/tasks. It's worth a try to just get a tour of some features available in zsh, and have some examples to look at. I don't know enough about either bash or zsh to list out feature-by-feature differences, but if you want a practical, real-world tour of zsh, oh-my-zsh is a good place to start.
People have mentioned syntax-highlighting, which is cool, and I'll be checking it out shortly.
But MY favorite feature of zsh is ZLE: the Zsh Line Editor. The fact that I hit up-arrow, and see the for|while|if statements as I typed them, rather than mashed together into a horrible, semi-colon infected, one-liner (like bash) is awesome.
If I understand your problem with bash correctly, it can be remedied using `shopt -s cmdhist` and `shopt -s lithist`.
I commonly write long for loops in the shell and hitting the up arrow to bring it back up, should I want to edit it, etc., then it appears with all the newlines just as I typed it.
I know it seems like a big jump, but once you've gotten the swing of things you'll wonder why you ever bothered worrying.
Don't worry about learning all the benefits at once. Make your shell look exactly like what you've got now and figure out the new features as you go along. There'll always be something new to make you smile.
I switched to zsh a couple of years ago, and I wish I'd never even started with bash! It's one of the few app changes I've made where I unequivocally regret not having made it sooner (the other notable one is sawfish -> xmonad -- make of that what you will!)
I switched because of the massive control over the prompt.
I've currently got a three line prompt that includes info about my current repository:
(git)[45afc8f02fef U master [origin/master ] ]
It lists type (git/hg) [checkout (U)pdated branch [remote branch] ]. It'll tell you how many branches different the remote is, what you are up to (staged), and colors.
That, better tab completion, and syntax highlighting of the command line are my killer features. I'm running a fork of the oh-my-zsh project, so you can see the features by grabbing a copy: https://github.com/srathbun/oh-my-zsh
Ctrl+R in bash (by default, at least) will not search from the middle of a command. For instance, if the previous command was "hello", searching for "ello" will not bring it up. Whereas with zsh, it will.
I wish there were ido-style searching, where typing "slstr" would match "some long string". (Provided, of course, there were no other strings that were a closer match.)
GitHub still does not give you the revision at which a pull request was merged (even if you did it from their interface), if you don't specifically reference the request from the commit message (to create a backlink) the relation is lost to gh.
It's annoying when you're trying to see where/when a fix has been landed.
Is it possible to upgrade OS X's default zsh version to 5.0?
How do I make that my login shell? When I go to login options, I don't see zsh 5.0 as an option.
Does this mean I have to manually enter the path like /usr/local/zsh?
I liked zsh a lot until I found that it would take a long time to cd into certain directories, I think they were ones with large git repositories. Maybe there's some way to shut that off but I went back to bash where I could be sure things would be responsive.
which lets it avoid expensive checks that my prompt doesn't need (it already shows that info elsewhere).
The real big win is that I export `POST_1_7_2_GIT=1` in `~/.zshrc` and the tweaks I made teach the git plugin to use `--ignore-submodule=dirty` when calling `git status`, which makes a huge difference.
I haven't caught up with oh-my-zsh in a bit; if there's a good place for me to rebase onto and do a new pull request I will. Does anybody know who the real oh-my-zsh maintainer is these days?
Not using oh-my-zsh or the like, zsh has lots of hooks and omz uses a lot of this hooks for or around git repos, so CD-ing into a git repo entails loads of work.
Use vanilla zsh and configure as needed, and it'll be as zippy as everywhere else.
Some of the plugins included in contrib, as well as really feature heavy pre-made configs like oh-my-zsh can slow things down. They're good to use as a starting point, but you can make the features you actually want really fast with some research.
I think many of the built-in are actually pretty out of date, but it does seem like Apple's not too concerned with following the upstream release schedule - one of the Xcode releases shipped with a slightly pre-3.0 release of LLVM's clang.
Everyone ships with the development 4.3.x series, because stable Zsh releases are very rare and the development series is actually very stable. It is not just OS X by far.