You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.2 KiB

# Beep on error in line editor.
setopt beep
# Use human-friendly identifiers.
typeset -g -A keys
keys=(
'Control' '\C-'
'Escape' '\e'
'Meta' '\M-'
'F1' '^[OP'
'F2' '^[OQ'
'F3' '^[OR'
'F4' '^[OS'
'F5' '^[[15~'
'F6' '^[[17~'
'F7' '^[[18~'
'F8' '^[[19~'
'F9' '^[[20~'
'F10' '^[[21~'
'F11' '^[[23~'
'F12' '^[[24~'
'Backspace' '^?'
'Insert' '^[[2~'
'Home' '^[[H'
'PageUp' '^[[5~'
'Delete' '^[[3~'
'End' '^[[F'
'PageDown' '^[[6~'
'Up' '^[[A'
'Left' '^[[D'
'Down' '^[[B'
'Right' '^[[C'
'Menu' '^[[29~'
)
bindkey -d # Reset to default key bindings.
bindkey -e # Use Emacs key bindings.
# Do history expansion on space.
bindkey ' ' magic-space
# Avoid binding ^J, ^M, ^C, ^?, ^S, ^Q, etc.
bindkey "${keys[Home]}" beginning-of-line
bindkey "${keys[End]}" end-of-line
bindkey "${keys[Insert]}" overwrite-mode
bindkey "${keys[Delete]}" delete-char
bindkey "${keys[Up]}" up-line-or-history
bindkey "${keys[Down]}" down-line-or-history
bindkey "${keys[Left]}" backward-char
bindkey "${keys[Right]}" forward-char
bindkey "${keys[Meta]}b" emacs-backward-word
bindkey "${keys[Meta]}f" emacs-forward-word
bindkey "${keys[Escape]}${keys[Left]}" emacs-backward-word
bindkey "${keys[Escape]}${keys[Right]}" emacs-forward-word
bindkey "${keys[Control]}w" kill-region
bindkey "${keys[Escape]}e" expand-cmd-path
bindkey "${keys[Escape]}m" copy-prev-shell-word
bindkey '^[[Z' reverse-menu-complete # Shift + Tab
bindkey "${keys[Control]}i" expand-or-complete-prefix # Complete in middle of word.
bindkey "${keys[Control]}_" undo
bindkey "${keys[Escape]}_" redo
# History
if autoloadable history-search-end; then
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "${keys[Control]}p" history-beginning-search-backward-end
bindkey "${keys[Control]}n" history-beginning-search-forward-end
else
bindkey "${keys[Control]}p" history-beginning-search-backward
bindkey "${keys[Control]}n" history-beginning-search-forward
fi
if (( ${+widgets[history-incremental-pattern-search-backward]} )); then
bindkey "${keys[Control]}r" history-incremental-pattern-search-backward
bindkey "${keys[Control]}s" history-incremental-pattern-search-forward
else
bindkey "${keys[Control]}r" history-incremental-search-backward
bindkey "${keys[Control]}s" history-incremental-search-forward
fi
# Allow command line editing in an external editor.
autoload -Uz edit-command-line
zle -N edit-command-line
bindkey "${keys[Control]}x${keys[Control]}e" edit-command-line
# Convert .... to ../.. automatically.
function rationalize-dot() {
if [[ $LBUFFER = *.. ]]; then
LBUFFER+=/..
else
LBUFFER+=.
fi
}
zle -N rationalize-dot
bindkey '.' rationalize-dot
bindkey -M isearch . self-insert 2>/dev/null