Implemented GNU Emacs key bindings.
This commit is contained in:
parent
eaf74b2534
commit
27b9c85900
|
@ -1,49 +1,107 @@
|
||||||
# TODO: Write a GNU Emacs key bindings file akin to the vi-mode plugin.
|
# Beep on error in line editor.
|
||||||
|
setopt beep
|
||||||
|
|
||||||
bindkey -e
|
# Use human-friendly identifiers.
|
||||||
bindkey '\ew' kill-region
|
typeset -g -A keys
|
||||||
bindkey -s '\el' "ls\n"
|
keys=(
|
||||||
bindkey -s '\e.' "..\n"
|
'Control' '\C-'
|
||||||
bindkey '^r' history-incremental-search-backward
|
'Escape' '\e'
|
||||||
bindkey "^[[5~" up-line-or-history
|
'Meta' '\M-'
|
||||||
bindkey "^[[6~" down-line-or-history
|
'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~'
|
||||||
|
)
|
||||||
|
|
||||||
# Make key up/down move up/down or search history.
|
bindkey -d # Reset to default key bindings.
|
||||||
bindkey '^[[A' up-line-or-search
|
bindkey -e # Use Emacs key bindings.
|
||||||
bindkey '^[[B' down-line-or-search
|
|
||||||
|
|
||||||
bindkey "^[[H" beginning-of-line
|
|
||||||
bindkey "^[[1~" beginning-of-line
|
|
||||||
bindkey "^[[F" end-of-line
|
|
||||||
bindkey "^[[4~" end-of-line
|
|
||||||
|
|
||||||
# Do history expansion on space.
|
# Do history expansion on space.
|
||||||
bindkey ' ' magic-space
|
bindkey ' ' magic-space
|
||||||
|
|
||||||
# File rename magick.
|
# Avoid binding ^J, ^M, ^C, ^?, ^S, ^Q, etc.
|
||||||
bindkey "^[m" copy-prev-shell-word
|
bindkey "${keys[Home]}" beginning-of-line
|
||||||
bindkey '^[[Z' reverse-menu-complete
|
bindkey "${keys[End]}" end-of-line
|
||||||
|
|
||||||
# Make the delete key (or Fn + Delete on the Mac) work instead of outputting a ~.
|
bindkey "${keys[Insert]}" overwrite-mode
|
||||||
bindkey "^[[3~" delete-char
|
bindkey "${keys[Delete]}" delete-char
|
||||||
bindkey "^[3;5~" delete-char
|
|
||||||
bindkey "\e[3~" delete-char
|
|
||||||
|
|
||||||
# Consider GNU Emacs keybindings:
|
bindkey "${keys[Up]}" up-line-or-history
|
||||||
|
bindkey "${keys[Down]}" down-line-or-history
|
||||||
|
|
||||||
#bindkey -e # Emacs key bindings.
|
bindkey "${keys[Left]}" backward-char
|
||||||
#
|
bindkey "${keys[Right]}" forward-char
|
||||||
#bindkey '^[[A' up-line-or-search
|
|
||||||
#bindkey '^[[B' down-line-or-search
|
bindkey "${keys[Meta]}b" emacs-backward-word
|
||||||
#bindkey '^[^[[C' emacs-forward-word
|
bindkey "${keys[Meta]}f" emacs-forward-word
|
||||||
#bindkey '^[^[[D' emacs-backward-word
|
bindkey "${keys[Escape]}${keys[Left]}" emacs-backward-word
|
||||||
#
|
bindkey "${keys[Escape]}${keys[Right]}" emacs-forward-word
|
||||||
#bindkey -s '^X^Z' '%-^M'
|
|
||||||
#bindkey '^[e' expand-cmd-path
|
bindkey "${keys[Control]}w" kill-region
|
||||||
#bindkey '^[^I' reverse-menu-complete
|
|
||||||
#bindkey '^X^N' accept-and-infer-next-history
|
bindkey "${keys[Escape]}e" expand-cmd-path
|
||||||
#bindkey '^W' kill-region
|
bindkey "${keys[Escape]}m" copy-prev-shell-word
|
||||||
#bindkey '^I' complete-word
|
|
||||||
## FIXME: A weird sequence that rxvt produces
|
bindkey '^[[Z' reverse-menu-complete # Shift + Tab
|
||||||
#bindkey -s '^[[Z' '\t'
|
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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue