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 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.
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?
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.
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...
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.)
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!)
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.
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.
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.
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
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.
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.
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
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.
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 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.
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.
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.
58 comments
[ 4.2 ms ] story [ 128 ms ] threadDoes this mean something like syntax highlighting for the command line is now possible?
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.
[1] https://github.com/zsh-users/zsh-syntax-highlighting
Fish is another shell that supports syntax highlighting out of the box.
Does this mean I have to manually enter the path like /usr/local/zsh?
It's annoying when you're trying to see where/when a fix has been landed.
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...
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.
And, there's even a script that offers Fish-like syntax coloring for Zsh: https://github.com/zsh-users/zsh-syntax-highlighting/
But not having used Fish yet myself, I can't really offer any reasons to use Zsh over Fish.
Bash script compatibility, bigger userbase and therefore more third party customizations.
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.
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?
The glob features are certainly quite useful too, for example, if there's a file nested deep inside some directory I can just enter
and zsh will expand it for me.- Keyboard navigation for TAB completion (using the arrows)
- Coloured TAB completion
- "for" one-liners: for f in /*.py; wc -l $f
- Named directories (cd ~named_dir)
(edit: formatting)
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.
Cheers!
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
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.
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.
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.
http://www.delorie.com/gnu/docs/bash/bashref_108.html
In my plain gnome-terminal with git it would instantly autocomplete when I pressed tab.
I have a few patches that speed up its git plugin by letting you opt-out of expensive operations. https://github.com/davvid/oh-my-zsh/commits/davvid
Last I checked, oh-my-zsh was in transition to a new version(?), and the pull requests have generally been ignored because of this.
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.
Commit on the official repository: http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=co...