Skip to content

Comment on Shell Gamification (how I learn to use my shell aliases)

Comments

For aliases, convenience functions, and fancy widgets, my philosophy is one word: wait. I make myself go through the trouble of doing it the usual way for a little while. This way, I usually end up with much more domain knowledge and a much more elegant solution than if I'd rushed in to make things easier right of the bat.

For example, I don't have `alias gs='git status'`. Just `alias g=git` works great, and git has its own awesome alias system with tab completion that gets me the rest of it. So instead of `gs` I type `g s`, and I get tab completion on all the flags.

Tab completion and aliases need not be mutually exclusive. For instance, in zsh you can use:

    alias gs='git status'
    compdef _git gs=git-status
FYI: I also mapped g without parameters to `git status -sb` but g with parameters will simply execute everything as normal
    g () {
      if [ $# -eq 0 ]
      then
        git status -sb
      else
        git $*
      fi
    }
    compdef g=git

Neat! I'll try that using the g() function. I would replace your $* with "$@" (in double quotes), though, so it doesn't try to re-split your arguments by the IFS. (Yes, $@ is a gigantic hack, but a necessary one.) See http://stackoverflow.com/questions/3008695/what-the-differen...

It only looks like a hack until you understand Bash arrays.

I was about to ask how you got your alias working with completion, and then I found this: http://stackoverflow.com/questions/342969/how-do-i-get-bash-...

I've never messed with bash completion before, but it was as simple as adding this to my bash_aliases:

     complete -o default -o nospace -F _git g
AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.