In this post, I want to share how to use bindkeys command to solve a few issues when using Zsh.

Can not use HOME and END keys normally

After using Zsh, I found that some terminals can not understand Home and End keys correctly, i.e., I can not go to the beginning or end of a line by pressing Home or End key.

This is because the key codes that terminal recognizes when you press certain keys can not be recognized by Zsh. You can manually find which key code is sent when you press a key. You can use showkey -a to print the key codes. Here is what it shows when I press Home and End keys.

After we know the key codes for these two keys, we can bind the codes to the operation we want to perform, that is begin-of-line and end-of-line. Add the following settings to your .zshrc:

bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-line

Bind key to run a custom command

One reader of this post asked a question on how to use shortcut keys to run the following command:

nvim $(fzf)

I searched the web and found a solution. Suppose that we want to bind Ctrl + O to the above command, we can add the following setting to .zshrc:

bindkey -s '^o' 'nvim $(fzf)^M'
# you may also use the following one
# bindkey -s '^o' 'nvim $(fzf)\n'

In the above setting, -s option is used to translate the input string to output string so that when you press the shortcut, it is replaced with the command you want to run. ^M or \n is used to represent the Enter key so that the command is run automatically.