If you work with terminals extensively, you may be tired of typing cd to go to directories, especially when directory names are very long. z.lua is such a tool to make your life easier by jumping to the desired directory smartly.

Install

Linux (bash)

If you are using bash shell, you need to download the plugin manually. Down and z.lua file and add the following setting to your .bashrc.

# change /path/to/z.lua to the actual path of z.lua file
eval "$(lua /path/to/z.lua --init bash enhanced once)"

Linux (zsh)

If you are using zsh, you can install this plugin with antigen:

antigen bundle skywind3000/z.lua

Windows (Cmder)

z.lua requires that the [lua]() binary is in your PATH. The easiest way to install lua binary is to install LuaDist. Just extract it to somewhere on your system and add the path the lua.exe to your system PATH.

Then, copy file z.lua and z.cmd to $CMDERROOT/vendor folder and add $CMDERROOT/vendor to your system PATH.

Make sure to reboot your computer after you have updated the system PATH to make the change take effect.

How to use

First, you need to cd to a few directories after installing z.lua to build the cd history. After that, to go a directory containing keyword foo, use the following command:

z foo

Command completion

z.lua supports command completion. To start completion, press <Tab> after the keyword, for example,

z foo<Tab>

Interactive selection

Sometimes, several directories may contain the same keywords. You can use z with -i option to start interactive path selection:

z -i foo

All directories containing foo will be listed with its index, you can then type a index to go to a specific directory.

Jump backward to parent folder

To jump backward to parent directories, use z -b command. Suppose that you are in directory ~/github/foo/bar/util, to go to foo directory, simply use the following command:

z -b foo

other settings

Other useful settings are:

export _ZL_MATCH_MODE=1  # enhanced matching mode
export _ZL_ECHO=1  # display the path after cd
export _ZL_ADD_ONCE=1  # only add path if the $PWD is changed

We can also create alias for commonly-used command:

# alias for z.lua
alias zi="z -i"  # interactive selection
alias zb="z -b"  # jump backward

References