Hacker News new | past | comments | ask | show | jobs | submit login
Zsh 5.0 released (github.com/zsh-users)
141 points by fredoliveira on July 23, 2012 | hide | past | favorite | 57 comments



This file lists what's new since 4.2: https://github.com/zsh-users/zsh/blob/master/NEWS


> Highlighting and colouring of the command line is supported.

Does this mean something like syntax highlighting for the command line is now possible?


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.

[1] https://github.com/zsh-users/zsh-syntax-highlighting


It was already possible with https://github.com/zsh-users/zsh-syntax-highlighting.

Fish is another shell that supports syntax highlighting out of the box.


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.

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.


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.


>I can't really offer any reasons to use Zsh over Fish.

Bash script compatibility, bigger userbase and therefore more third party customizations.


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

    vim **/filename 
and zsh will expand it for me.


works in bash too, enable it with shopt -s globstar.


should be there in bash 4


Besides the awesome TAB completion, here are a few features that I use daily:

- 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)


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.

Cheers!


That for loop looks pretty neat, however I don't tend to write loops that often on the command line so it doesn't really benefit me that much.



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.

http://www.delorie.com/gnu/docs/bash/bashref_108.html


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!)


But the OP asked why, not if, he should switch.


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


My favorite feature is that zsh offers vi mode when editing your commandline, just press ESC.


Bash also supports set -o vi.


This is usually the first command I type after I ssh onto something.


But zsh can tell you if you're in insert or normal mode. And it has RPROMPT!


I switched solely for the reason Zsh has command substring search. It's a huge timesaver for some who spends more than 50% of time on the terminal.


Ctrl-R in bash?


No, substring searches.

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.


The default bash on OS X (3.2.48(1)-release) just did when I tried it.


Ctrl+R definitely works that way with bash, but I think he may be referencing tab completion:

    > ell<TAB>
    Completing external command
    git-shell  xdmshell   xkbbell  
    Completing shell function
    _ispell


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.)


Updated Homebrew's Zsh formula for v5, give it a +1 if you want to see it updated faster: https://github.com/mxcl/homebrew/pull/13543


GitHub still doesn't have a +1 button and you must still clutter the issue tracker with +1 comments? Wow.


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?


It's /usr/local/bin/zsh. You have to add that path to /etc/shells before chsh will let you set it as a login shell. Happy zshing!


Thank you, this works!


% chsh yourusername


Don't you mean `chsh -s /bin/zsh` ?


That works, too. But my way allows you to set your office number in the Gecos field!



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.


Were you using oh-my-zsh?

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.


Yes, I was using oh-my-zsh. I'd like to try it again if it's easy to make it non-slow.


Some of the secret details are in my theme: https://github.com/davvid/oh-my-zsh/blob/davvid/themes/davvi...

    ZSH_THEME_GIT_PROMPT_DIRTY=""
    ZSH_THEME_GIT_PROMPT_CLEAN=""
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?


Same problem here. I think this is based on git plugin, since it displays current branch when you cd into directory. You can try disable that plugin.


One thing I have noticed is a delay in tab completion with the `git checkout` command.

In my plain gnome-terminal with git it would instantly autocomplete when I pressed tab.


> Maybe there's some way to shut that off

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 didn't realize that the zsh OS X currently ships with (4.3.11) isn't a stable release. Is that unusual for their built-ins?


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.


Apple has been responsible for a lot of recent LLVM development, so it's not as though they didn't know what they were getting into with that.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: