Zsh Autocomplete Function to change and auto complete directories' name

About some weeks ago, I was trying to find a way to alias my favourite directory (~/Programming/Pythons) in zsh, and it should show me the directories contained inside it. But aliasing doesn’t work, except to cd me to that directory. Or a function can help me get into the directories inside ~/Programming/Pythons but I’d have to type out the directories’ name manually. That wasn’t an option either.

So I turned to “Uncle Google” :P for it. Also what I remembered from Zsh is that it’s auto completion is really awesome. So I searched for “zsh autocomplete function” and read some stackoverflow examples and stuff. But I had some errors if I was using oh-my-zsh‘s functions.zsh to store/write my zsh auto complete function in it.

What I did was, instead of writing that auto complete function inside oh-my-zsh’s functions.zsh, I wrote it directly inside .zshrc, like this:

    function prog() { 
        cd ~/Programming/Pythons/$1;

    _prog() {
        _files -W ~/Programming/Pythons;

    compdef _prog prog

What this code actually does is that when you type prog after sourcing your .zshrc file, it expands the defined directory, in here; ‘~/Programming/Pythons/’ and the argument $1 is based on whatever directory you selected from the expansion of the directory from the function  _prog(), like this;

This exactly did what I needed. If you got awesome auto complete functions written, do share it at the comments. :)


Maverick Kaung
Maverick Kaung
IT Security Enthusiast

Ye Myat “Maverick” Kaung is a highly motivated individual with a passion for security and open source software. Also an aspiring hacker and software engineer.