zsh: The Git Module
Zsh tab completion is great for git. For instance, suppose you
typed git commit -- (with two dash characters at the end), and at
that point hit the tab key. You will see the available options for the
commit action:
$ git commit --❚
--all -- stage all modified and deleted paths
--allow-empty -- allow recording an empty commit
--allow-empty-message -- allow recording a commit with an empty message
--amend -- amend the tip of the current branch
--author -- override the author name used in the commit
. . .
One thing I just learned about the Zshell tab completion is that it
doesn't just work from the end. In one of my "journal directory", I
label everything, entry_001.org, entry_002.org, etc.††Yeah, I'm not sure what I'll do when I reach 1,000 entries. I guess I just don't think I'll be keeping it up that long
If I want to edit entry_157.org, I can just type 157 and hit the
tab key. Typing just 15 shows me this list:
$ e 15❚
entry_015.org entry_150.org entry_152.org entry_154.org
entry_156.org entry_158.org entry_115.org entry_151.org
entry_153.org entry_155.org entry_157.org entry_159.org
But the tab completion feature for git does not come from the git
module from Oh My Zsh. That module just has around a billion
aliases for git commands, for instance:
alias gst='git status'
alias gl='git pull'
alias gup='git pull --rebase'
. . .
These aliases seem like a pretty good idea… except for remembering
to use them… and hopefully they won't conflict with any aliases you
currently use. As you may have noticed, my .zshrc file already
has a g alias, but it uses Huy Nguyen's bashmarks project.
However, if you paid attention to the git commands you used often, and
created aliases yourself, you have a higher chance to use them. What
if we had the computer do the paying attention?
It already does, in your ~/.zsh_history file, so a quick analysis
should give you ideas for what you should alias first:
grep ';git ' ~/.zsh_history | \
cut -d' ' -f3- | cut -d'-' -f1 | sort | uniq -c
The grep command grabs just the git calls, and the first cut
removes the actual git from the beginning of the line. The second
cut removes any options (but not file names or URLs‡‡That is left as an exercise to the reader. ).
The sort and uniq is just a way to help narrow the focus. The -c
option to uniq will tell you the number of occurences… if you type
git status 80 times (like I did this last week), an alias may be in
order.
Since I've been actually busy programming, I'm just going to leave you
with this simple idea this week.
Tell others about this article: