The Backstory#
I spend most of my day at the command line and, although I took a couple of years of typing classes in high school, typos are constantly tripping me up.
"Typewriter (pre-email relict)" by mripp is licensed under CC BY 2.0 .
The git config#
With a lot of my time on the command line being spent using git
, I like to
take advantage of git
’s ability to fix typos automatically. In my dot
files I run this command as part of my
git
configuration:
git config --global help.autocorrect 10
This command enables help.autocorrect
in your global git
config. The
--global
flag means that the value you set will end up in your ~/.gitconfig
and for this reason will be a default for all of your git
repositories on
this machine. You can always override the global config locally for any
repository for which you don’t want this enabled. If you don’t want this
enabled globally, just do it inside the repo where you want it enabled and omit
the --global
flag:
git config help.autocorrect 10
help.autocorrect
is pretty much what it sounds like. You’re giving git
permission to try to make sense of your mangled command line input. Note that
git
’s behaviour here is more about asking forgiveness than permission. It
tells you that it has rewritten your command and gives you an announced time to
make it stop.
The 10
in the configuration means that git
will give you exactly 1 second
to ctrl-c
and bail on its suggested correction before it goes ahead and does
it. So, it’s an integer which represents 10ths of a second. Set it to 100 if
you want to wait 10 seconds etc. (I believe I initially used a larger number
until I was comfortable that this setting was not going to get me in trouble).
You may want to start with a less aggressive value.
Now, let’s see how this works:
git poush
WARNING: You called a Git command named 'poush', which does not exist.
Continuing in 1.0 seconds, assuming that you meant 'push'.
That’s pretty basic. git
knows that poush
is not a command, but push
is,
so it announces its intention to “Do What I Mean” and gives me 1.0 seconds to
intervene. That in itself makes for a smoother day for me. We can take it one
step further.
bash aliases#
In my ~/.bashrc
I’ve added the following lines:
alias gi=git # fix typos
alias gti=git # fix typos
This creates bash
aliases which mean that typing gi
or gti
will invoke
git
rather than saying that the command is not found. That means I can
happily (mis)type something like gi tpush
and git
can save me from myself.
Let’s see it in action:
gi tpush
WARNING: You called a Git command named 'tpush', which does not exist.
Continuing in 1.0 seconds, assuming that you meant 'push'.
Buyer Beware#
As a caveat emptor, I should add that things could go sometimes go in an unplanned direction.
gi tpoush
WARNING: You called a Git command named 'tpoush', which does not exist.
Continuing in 1.0 seconds, assuming that you meant 'http-push'.
usage: git http-push [--all] [--dry-run] [--force] [--verbose] <remote> [<head>...]
I can’t recall that this has ever bitten me in a bad way, but it’s something to be aware of.
That’s it! You may think this is a terrible idea and you may be right. Personally I’ve been doing this for many years now and it’s a genuine pleasure when one of my botched commands ends up doing exactly what I intended.