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.
References#
- Home and End not recognized
- Bind keys to a command
- http://zsh.sourceforge.net/Guide/zshguide04.html
- http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Builtins
- http://zsh.sourceforge.net/Intro/intro_11.html
- https://github.com/tomsquest/dotfiles/blob/master/zsh/bindkey.zsh
- https://unix.stackexchange.com/questions/285208/how-to-remove-a-zsh-keybinding-if-i-dont-know-what-it-does
- https://unix.stackexchange.com/questions/79897/how-can-i-use-bindkey-to-run-a-script