diff --git a/common/.config/zsh/configs/bindings b/common/.config/zsh/configs/bindings index 4a37c08b..65952c8c 100644 --- a/common/.config/zsh/configs/bindings +++ b/common/.config/zsh/configs/bindings @@ -1,24 +1,82 @@ #!/bin/zsh +WORDCHARS='*?_-.[]~&;!#$%^(){}<>' + # vi mode bindkey -v -# Use vim keys in tab complete menu: -bindkey -M menuselect 'h' vi-backward-char -bindkey -M menuselect 'k' vi-up-line-or-history -bindkey -M menuselect 'l' vi-forward-char -bindkey -M menuselect 'j' vi-down-line-or-history +zmodload zsh/terminfo +typeset -gA key_info -# Widgets -bindkey '^e' lfwrap -bindkey '^g' lg -bindkey '^z' togglefg -bindkey '^s' toggle-fzf-tab -bindkey -M vicmd '^v' edit-command-line +key_info=( + 'Control' "\C-" + 'Escape' "\e" + 'Meta' "\M-" + 'Backspace' "^?" + 'Delete' "^[[3~" + 'F1' "$terminfo[kf1]" + 'F2' "$terminfo[kf2]" + 'F3' "$terminfo[kf3]" + 'F4' "$terminfo[kf4]" + 'F5' "$terminfo[kf5]" + 'F6' "$terminfo[kf6]" + 'F7' "$terminfo[kf7]" + 'F8' "$terminfo[kf8]" + 'F9' "$terminfo[kf9]" + 'F10' "$terminfo[kf10]" + 'F11' "$terminfo[kf11]" + 'F12' "$terminfo[kf12]" + 'Insert' "$terminfo[kich1]" + 'Home' "$terminfo[khome]" + 'PageUp' "$terminfo[kpp]" + 'End' "$terminfo[kend]" + 'PageDown' "$terminfo[knp]" + 'Up' "$terminfo[kcuu1]" + 'Left' "$terminfo[kcub1]" + 'Down' "$terminfo[kcud1]" + 'Right' "$terminfo[kcuf1]" + 'BackTab' "$terminfo[kcbt]" + 'AltLeft' "${key_info[Escape]}${key_info[Left]} \e[1;3D" + 'AltRight' "${key_info[Escape]}${key_info[Right]} \e[1;3C" + 'ControlLeft' "\e[1;5D" + 'ControlRight' "\e[1;5C" + 'ControlPageUp' "\e[5;5~" + 'ControlPageDown' "\e[6;5~" +) + +local -A global_keybinds +global_keybinds=( + "$key_info[Home]" beginning-of-line + "$key_info[End]" end-of-line + "$key_info[Delete]" delete-char + "$key_info[ControlLeft]" backward-word + "$key_info[ControlRight]" forward-word +) + +local -A viins_keybinds +viins_keybinds=( + "$key_info[Backspace]" backward-delete-char + "$key_info[Control]W" backward-kill-word + "$key_info[ControlLeft]" vi-backward-word + "$key_info[ControlRight]" vi-forward-word + "$key_info[Control]E" lfwrap + "$key_info[Control]G" lg + "$key_info[Control]S" toggle-fzf-tab +) + +local -A vicmd_keybinds +vicmd_keybinds=( + "$key_info[Delete]" delete-char + "$key_info[ControlLeft]" vi-backward-word + "$key_info[ControlRight]" vi-forward-word + "$key_info[Control]V" edit-command-line +) + +for key bind in ${(kv)global_keybinds} ${(kv)viins_keybinds}; do + bindkey -M viins "$key" "$bind" +done + +for key bind in ${(kv)global_keybinds} ${(kv)vicmd_keybinds}; do + bindkey -M vicmd "$key" "$bind" +done -bindkey '^?' backward-delete-char -bindkey '^[[3~' delete-char -bindkey "^[[H" beginning-of-line -bindkey '^[[4~' end-of-line -bindkey '^[[1;5C' forward-word -bindkey '^[[1;5D' backward-word