If you spend any considerable time in your terminal, then there are certain directories that you go to more often than others. You may depend on your terminal autocomplete to quickly type cd ~/Documents to and press up/down until you find the match. In this article, I'm going to show how I jump to my favourite directories.
The basic idea is to create an alias for your important directories and then using that alias, you easily jump to the directory. These aliases will be added to a ~/.gotorc file that is sourced for every terminal window.
Start by creating a ~/.functions.sh and a ~/.gotorc file. This will contain some helper functions that we will create. Make sure these files are sourced on every terminal instance (this depends on what terminal/bash profile you are using. For example, if you are using Zsh, then you do this by adding source $HOME/.functions.sh and source $HOME/.gotorc to the ~/.zshrc file).
Next, add the following bash commands to this ~/.functions.sh file:
# Generic def function
def() {
if [ "$1" = "goto" ]; then
def_goto "${@:2}"
fi
}
# Generic under function
undef() {
if [ "$1" = "goto" ]; then
undef_goto "${@:2}"
fi
}
# Defines a new goto command
def_goto() {
if [ -z "$1" ] || [ -z "$2" ]; then
echo "path and shortcut are required"
else
LOC="$1"
if [ "$1" = "." ]; then
LOC=`pwd`
fi
CMD="alias goto_$2=\"cd $LOC\""
echo "$CMD" >> ~/.gotorc
source ~/.gotorc
fi
}
# Undefines a goto command
undef_goto() {
if [ -z "$1" ]; then
echo "shortcut name is required"
else
pat="/goto_${1}/d"
sed -i '' "$pat" ~/.gotorc
source ~/.gotorc
fi
}
# Shortcut for jumping to a directory
goto() {
eval "goto_$1"
}
The def_goto is used to define an alias. You can define an alias by typing
def_goto someName /path/to/directory
The someName is the alias we will later use to jump the given directory. You can also use . as the path. When invoking this function, an alias with the name goto_someName is defined as cd /path/to/directory (if . was used, the current working directory that the def_goto was invoked in is automatically calculated). This alias is appended to ~/.gotorc file and the bash is resourced.
The undef_goto is used to remove the alias. The two methods def and undef are shortcuts for a more verbose usage of these functions. For instance, the example above can also be expressed as
def goto someName /path/to/directory
Now that you have an alias, you can jump to that directory using
goto someName
That's it! Happy coding.