abra zsh config 2.0

This commit is contained in:
Andrey Anurin
2018-08-12 15:26:21 +03:00
parent 201abd09c4
commit 6b114440e2
1195 changed files with 68948 additions and 10539 deletions

View File

@@ -11,14 +11,27 @@ Settings
To enable key bindings, add the following to *zpreztorc*, and replace 'bindings'
with 'emacs' or 'vi'.
zstyle ':prezto:module:editor' key-bindings 'bindings'
```sh
zstyle ':prezto:module:editor' key-bindings 'bindings'
```
### Dot Expansion
To enable the auto conversion of .... to ../.., add the following to
*zpreztorc*.
zstyle ':prezto:module:editor' dot-expansion 'yes'
```sh
zstyle ':prezto:module:editor' dot-expansion 'yes'
```
### PS Context
To enable the prompt context to be set, add the following to your
*zpreztorc*.
```sh
zstyle ':prezto:module:editor' ps-context 'yes'
```
Theming
-------
@@ -26,31 +39,56 @@ Theming
To indicate when the editor is in the primary keymap (emacs or viins), add
the following to your `theme_prompt_setup` function.
zstyle ':prezto:module:editor:info:keymap:primary' format '>>>'
```sh
zstyle ':prezto:module:editor:info:keymap:primary' format '>>>'
```
To indicate when the editor is in the primary keymap (emacs or viins) insert
mode, add the following to your `theme_prompt_setup` function.
zstyle ':prezto:module:editor:info:keymap:primary:insert' format 'I'
```sh
zstyle ':prezto:module:editor:info:keymap:primary:insert' format 'I'
```
To indicate when the editor is in the primary keymap (emacs or viins) overwrite
mode, add the following to your `theme_prompt_setup` function.
zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format 'O'
```sh
zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format 'O'
```
To indicate when the editor is in the alternate keymap (vicmd), add the
following to your `theme_prompt_setup` function.
zstyle ':prezto:module:editor:info:keymap:alternate' format '<<<'
```sh
zstyle ':prezto:module:editor:info:keymap:alternate' format '<<<'
```
To indicate when the editor is completing, add the following to your
`theme_prompt_setup` function.
zstyle ':prezto:module:editor:info:completing' format '...'
```sh
zstyle ':prezto:module:editor:info:completing' format '...'
```
Then add `$editor_info[context]`, where context is *keymap*, *insert*, or
*overwrite*, to `$PROMPT` or `$RPROMPT`.
Convenience Functions
---------------------
### bindkey-all
Provides a function `bindkey-all` which can be useful for checking how all of the
keys are bound. Normal `bindkey` command will only list the keys bound for one
keymap, which is not as useful if you want to grep through the output. The
keymap's names go to stderr so when you grep through bindkey-all's output you
will still see the headings and can tell which keymap each binding goes to.
It will also pass through arguments so you can use bindkey-all to set bindings
for all keymaps at once. If provided arguments it will *not* print out the
names of each of the keymaps, and just run the command for each keymap.
Authors
-------

View File

@@ -14,8 +14,7 @@ fi
# Options
#
# Beep on error in line editor.
setopt BEEP
setopt BEEP # Beep on error in line editor.
#
# Variables
@@ -28,9 +27,11 @@ WORDCHARS='*?_-.[]~&;!#$%^(){}<>'
zmodload zsh/terminfo
typeset -gA key_info
key_info=(
'Control' '\C-'
'ControlLeft' '\e[1;5D \e[5D \e\e[D \eOd'
'ControlRight' '\e[1;5C \e[5C \e\e[C \eOc'
'Control' '\C-'
'ControlLeft' '\e[1;5D \e[5D \e\e[D \eOd'
'ControlRight' '\e[1;5C \e[5C \e\e[C \eOc'
'ControlPageUp' '\e[5;5~'
'ControlPageDown' '\e[6;5~'
'Escape' '\e'
'Meta' '\M-'
'Backspace' "^?"
@@ -78,7 +79,15 @@ zle -N edit-command-line
#
# Functions
#
# Runs bindkey but for all of the keymaps. Running it with no arguments will
# print out the mappings for all of the keymaps.
function bindkey-all {
local keymap=''
for keymap in $(bindkey -l); do
[[ "$#" -eq 0 ]] && printf "#### %s\n" "${keymap}" 1>&2
bindkey -M "${keymap}" "$@"
done
}
# Exposes information about the Zsh Line Editor via the $editor_info associative
# array.
function editor-info {
@@ -103,12 +112,27 @@ function editor-info {
fi
unset REPLY
zle reset-prompt
zle -R
zle zle-reset-prompt
}
zle -N editor-info
# Reset the prompt based on the current context and
# the ps-context option.
function zle-reset-prompt {
if zstyle -t ':prezto:module:editor' ps-context; then
# If we aren't within one of the specified contexts, then we want to reset
# the prompt with the appropriate editor_info[keymap] if there is one.
if [[ $CONTEXT != (select|cont) ]]; then
zle reset-prompt
zle -R
fi
else
zle reset-prompt
zle -R
fi
}
zle -N zle-reset-prompt
# Updates editor information when the keymap changes.
function zle-keymap-select {
zle editor-info
@@ -186,6 +210,14 @@ zle -N expand-dot-to-parent-directory-path
function expand-or-complete-with-indicator {
local indicator
zstyle -s ':prezto:module:editor:info:completing' format 'indicator'
# This is included to work around a bug in zsh which shows up when interacting
# with multi-line prompts.
if [[ -z "$indicator" ]]; then
zle expand-or-complete
return
fi
print -Pn "$indicator"
zle expand-or-complete
zle redisplay
@@ -201,6 +233,35 @@ function prepend-sudo {
}
zle -N prepend-sudo
# Expand aliases
function glob-alias {
zle _expand_alias
zle expand-word
zle magic-space
}
zle -N glob-alias
# Toggle the comment character at the start of the line. This is meant to work
# around a buggy implementation of pound-insert in zsh.
#
# This is currently only used for the emacs keys because vi-pound-insert has
# been reported to work properly.
function pound-toggle {
if [[ "$BUFFER" = '#'* ]]; then
# Because of an oddity in how zsh handles the cursor when the buffer size
# changes, we need to make this check before we modify the buffer and let
# zsh handle moving the cursor back if it's past the end of the line.
if [[ $CURSOR != $#BUFFER ]]; then
(( CURSOR -= 1 ))
fi
BUFFER="${BUFFER:1}"
else
BUFFER="#$BUFFER"
(( CURSOR += 1 ))
fi
}
zle -N pound-toggle
# Reset to default key bindings.
bindkey -d
@@ -236,12 +297,18 @@ if (( $+widgets[history-incremental-pattern-search-backward] )); then
history-incremental-pattern-search-forward
fi
# Toggle comment at the start of the line. Note that we use pound-toggle which
# is similar to pount insert, but meant to work around some issues that were
# being seen in iTerm.
bindkey -M emacs "$key_info[Escape];" pound-toggle
#
# Vi Key Bindings
#
# Edit command in an external editor.
bindkey -M vicmd "v" edit-command-line
# Edit command in an external editor emacs style (v is used for visual mode)
bindkey -M vicmd "$key_info[Control]X$key_info[Control]E" edit-command-line
# Undo/Redo
bindkey -M vicmd "u" undo
@@ -255,14 +322,61 @@ else
bindkey -M vicmd "/" history-incremental-search-forward
fi
# Toggle comment at the start of the line.
bindkey -M vicmd "#" vi-pound-insert
#
# Emacs and Vi Key Bindings
#
for keymap in 'emacs' 'viins'; do
# Unbound keys in vicmd and viins mode will cause really odd things to happen
# such as the casing of all the characters you have typed changing or other
# undefined things. In emacs mode they just insert a tilde, but bind these keys
# in the main keymap to a noop op so if there is no keybind in the users mode
# it will fall back and do nothing.
function _prezto-zle-noop { ; }
zle -N _prezto-zle-noop
local -a unbound_keys
unbound_keys=(
"${key_info[F1]}"
"${key_info[F2]}"
"${key_info[F3]}"
"${key_info[F4]}"
"${key_info[F5]}"
"${key_info[F6]}"
"${key_info[F7]}"
"${key_info[F8]}"
"${key_info[F9]}"
"${key_info[F10]}"
"${key_info[F11]}"
"${key_info[F12]}"
"${key_info[PageUp]}"
"${key_info[PageDown]}"
"${key_info[ControlPageUp]}"
"${key_info[ControlPageDown]}"
)
for keymap in $unbound_keys; do
bindkey -M viins "${keymap}" _prezto-zle-noop
bindkey -M vicmd "${keymap}" _prezto-zle-noop
done
# Keybinds for all keymaps
for keymap in 'emacs' 'viins' 'vicmd'; do
bindkey -M "$keymap" "$key_info[Home]" beginning-of-line
bindkey -M "$keymap" "$key_info[End]" end-of-line
done
# Keybinds for all vi keymaps
for keymap in viins vicmd; do
# Ctrl + Left and Ctrl + Right bindings to forward/backward word
for key in "${(s: :)key_info[ControlLeft]}"
bindkey -M "$keymap" "$key" vi-backward-word
for key in "${(s: :)key_info[ControlRight]}"
bindkey -M "$keymap" "$key" vi-forward-word
done
# Keybinds for emacs and vi insert mode
for keymap in 'emacs' 'viins'; do
bindkey -M "$keymap" "$key_info[Insert]" overwrite-mode
bindkey -M "$keymap" "$key_info[Delete]" delete-char
bindkey -M "$keymap" "$key_info[Backspace]" backward-delete-char
@@ -305,8 +419,14 @@ for keymap in 'emacs' 'viins'; do
# Insert 'sudo ' at the beginning of the line.
bindkey -M "$keymap" "$key_info[Control]X$key_info[Control]S" prepend-sudo
# control-space expands all aliases, including global
bindkey -M "$keymap" "$key_info[Control] " glob-alias
done
# Delete key deletes character in vimcmd cmd mode instead of weird default functionality
bindkey -M vicmd "$key_info[Delete]" delete-char
# Do not expand .... to ../.. during incremental search.
if zstyle -t ':prezto:module:editor' dot-expansion; then
bindkey -M isearch . self-insert 2> /dev/null
@@ -326,4 +446,4 @@ else
print "prezto: editor: invalid key bindings: $key_bindings" >&2
fi
unset key{,map,bindings}
unset key{,map,_bindings}