Shared zshrc file
2009/05/13Over the years, I’ve had a number of requests for me to share my zshrc file with friends and coworkers. In the past, I’ve normally trimmed out the sensitive parts by hand and then e-mailed the most useful stuff. I’ve always intended to make this an easier process and I’ve finally gotten around to it.
I’ve created a new bitbucket repository to hold my shared zshrc configuration. You can get it for yourself by cloning the repository:
cd ~ hg clone http://bitbucket.org/tednaleid/shared-zshrc/
If you don’t have mercurial installed, you can just grab the compressed archive of your choice from the downloads page.
I’d suggest cloning/unzipping into your home directory, but you can put it wherever you want.
There’s an install.sh script in there that will create a new ~/.zshrc file. If you have an existing .zshrc file, just move it out of the way and run the install script (it won’t let you whack an existing file).
./install.shThat created .zshrc file will load up all of my shared settings and aliases from wherever you have the shared-zshrc directory. It also will look for a host specific file where any sensitive info, or host dependent info can be added. I normally put things like my change directory and ssh aliases in here.
I probably created around half of these files myself, but I couldn’t tell you for the life of me where the majority of the other half came from. This file has accreted over the years like barnacles on a ship.
Some of these commands originally started out in either a tcsh file (or was it ksh?), I eventually moved to bash, and then a couple of years ago, a coworker showed me the wonders of zsh and I haven’t looked back.
If you’re still using bash, give zsh a try. Changing your shell is as easy as running this command:
chsh -s /bin/zsh
ZSH Specific Stuff
Most of the zsh shell configuration magic is in zshrc_compinstall. Some features include:
- shared history across shells
- command spelling correction
- vastly improved tab completion of commands (including keyboard navigation of potential matches)
- file globbing that makes finding files easy (try
ls **/*.txtto recursively search for all txt files, much easier thanfind . -name "*.txt" - automatically using pushd for cd commands, use “dh” to see a history of your directories, use cd -N to go back N directories in your history (ex:
cd -3)
Useful Aliases
Some of the most useful aliases in zshrc_general include:
Grep through Aliases (ag)
I often forget what some of my less often used aliases are, but I know what commands they use. I’ve set up “ag” (alias grep) to help me search through my aliases and find the right one:
% ag python webshare='python -m SimpleHTTPServer'
Grepping History (gh)
Great for finding commands in your history that you can only remember part of.
gh grails ... 582 grails create-app testDates 584 grails create-domain-class Foo 585 grails generate-all Foo 587 cd grails-app 591 grails generate-views Foo 592 grails run-app
Global Alias – GV – to “grep -v”
Grep is great for finding things, but often you find too much and need to slice stuff out. If you use “grep -v” that finds all lines that don’t match a pattern. The global alias “GV” that makes this even easier.
grep -ri foo
If that finds too much stuff (say catalina log files and svn files that you don’t care about), just slice them out with GV:
grep -ri foo GV svn GV catalina
That will remove any lines that have “svn” or “catalina” anywhere in them (including the file name).
I think that rc files tend to be very personal things, what works for me likely won’t work for you exactly as it is. But I also love to look at other people’s rc files to grab the things that look interesting. Feel free to poke through mine and grab whatever strikes your fancy.
There’s a ton of other stuff in there that I use every day, including sections specific to version control (svn and hg) as well as groovy/grails shortcuts. Feel free to poke around and ask me any questions about what something does.
There are 3 comments in this article: