Yes, Oh My Zsh is awesome! That’s the first thing I installed when I switched from Bash to Zsh and I used it for a few years.
Past that time, I realized that in my daily use, the only features I was taking advantage was:
Autocompletion and history-based autocompletion using the arrow keys.
The fancy multi-line and colorful user prompt showing the working directory, and the switching color after the fail/success of the previous command execution.
The git repository info at the user prompt.
zcommand, provided by the ZSH-z plugin.
I couldn’t help myself but thinking that the Oh My Zsh framework was much more than I needed. I decided to remove Oh My Zsh and reset Zsh from scratch, so I could configure and install only the features I needed.
This is a four-part post series explaining how to set up those features on a fresh new Zsh installation:
Customize Zsh Pt.1 - Autocompletion 👈
Zsh has a powerful completion system built-in by default. You need to load and initialize to take advantage of it. There is a lot to learn about it if you feel like going deeper but this post’s objectives are:
To enable the standard autocompletion.
To set up history-based autocompletion.
After a Zsh fresh install it runs a helper for the first time you log into the shell:
This is the Z Shell configuration function for new users, zsh-newuser-install. You are seeing this message because you have no zsh startup files (the files .zshenv, .zprofile, .zshrc, .zlogin in the directory ~). This function can help you with a few settings that should make your use of the shell easier. You can: (q) Quit and do nothing. The function will be run again next time. (0) Exit, creating the file ~/.zshrc containing just a comment. That will prevent this function being run again. (1) Continue to the main menu. -------- Type one of the keys in parentheses ---
Avoid using the helper and apply the settings inside the .zshrc file, so:
0to exit the Zsh helper creating a blank
.zshrcfile in your
To load and initialize the Zsh completion system, open the
.zshrcfile in your code editor and add the following line at the top of the file:
# AUTOCOMPLETION # initialize autocompletion autoload -U compinit && compinit
man zshcompsys and go to
Use of compinit)
- To allow history-based autocompletion, first, apply some configurations to improve Zsh’s history management by adding the following lines to the
# history setup setopt SHARE_HISTORY HISTFILE=$HOME/.zhistory SAVEHIST=1000 HISTSIZE=999 setopt HIST_EXPIRE_DUPS_FIRST
(Read options and parameters descriptions:
man zshoptions and
- With Zsh history set, create key bindings to use up and down arrow keys to navigate history for the provided command:
# autocompletion using arrow keys (based on history) bindkey '\e[A' history-search-backward bindkey '\e[B' history-search-forward
The code above assumes that
[A is the value your terminal emulator sends for the keyboard up arrow, and that
[B is the value for the keyboard down arrow.
You can double check by pressing
<up-arrow> in your Zsh prompt, see more here.
man zshzle and go to
ZLE BUILTINS for key bindings, and go to
- Source the
.zshrcfile again, in the Zsh shell type:
Autocompletion is ready to go!
.zshrc file must look like this:
# AUTOCOMPLETION # initialize autocompletion autoload -U compinit compinit # history setup setopt APPEND_HISTORY setopt SHARE_HISTORY HISTFILE=$HOME/.zhistory SAVEHIST=1000 HISTSIZE=999 setopt HIST_EXPIRE_DUPS_FIRST setopt EXTENDED_HISTORY # autocompletion using arrow keys (based on history) bindkey '\e[A' history-search-backward bindkey '\e[B' history-search-forward # GENERAL # (bonus: Disable sound errors in Zsh) # never beep setopt NO_BEEP
With those simple steps autocompletion is ready and your Zsh shell is becoming more powerful.
Part 2 explores how to apply a simple configuration to improve the user prompt.
Zsh Documentation (man -k zsh to list each Zsh man page section)
This post appeared first at alldrops.info.
Follow me on Twitter to get more posts like this and other quick tips in your feed.
If you have any doubts or tips about this post, I’d appreciate knowing and discussing it in the comments section.
As English is not my native language, I apologize for the errors. Corrections are welcome.
Big thanks 🙌 to Eric Nielsen for pointing out some improvements in Zsh history settings.