mirror of
https://git.disroot.org/FollieHiyuki/dotfiles.git
synced 2024-11-25 00:38:23 -05:00
119 lines
3.5 KiB
Bash
119 lines
3.5 KiB
Bash
# ___ ______ _________
|
|
# __ | / /__(_) _______ _______________ /____
|
|
# __ | / /__ / __ __ `__ \ __ \ __ /_ _ \
|
|
# __ |/ / _ / _ / / / / / /_/ / /_/ / / __/
|
|
# _____/ /_/ /_/ /_/ /_/\____/\__,_/ \___/
|
|
#
|
|
bindkey -v
|
|
export KEYTIMEOUT=15 # long enough for the 'jk' to work
|
|
|
|
# Change cursor shape for different vi modes
|
|
function vi_zle-keymap-select {
|
|
if [[ ${KEYMAP} == vicmd ]]; then
|
|
echo -ne '\e[1 q'
|
|
elif [[ ${KEYMAP} == main ]] ||
|
|
[[ ${KEYMAP} == viins ]] ||
|
|
[[ ${KEYMAP} = '' ]]; then
|
|
echo -ne '\e[5 q'
|
|
fi
|
|
}
|
|
# Check for existing keymap-select widget
|
|
local existing_keymap_select_fn=$widgets[zle-keymap-select]
|
|
# zle-keymap-select is a special widget so it'll be "user:fnName" or nothing. Let's get fnName only.
|
|
existing_keymap_select_fn=${existing_keymap_select_fn//user:}
|
|
if [[ -z ${existing_keymap_select_fn} ]]; then
|
|
zle -N zle-keymap-select vi_zle-keymap-select
|
|
else
|
|
function vi_zle-keymap-select-wrapped {
|
|
${existing_keymap_select_fn} "$@"
|
|
vi_zle-keymap-select "$@"
|
|
}
|
|
zle -N zle-keymap-select vi_zle-keymap-select-wrapped
|
|
fi
|
|
echo -ne '\e[5 q' # Use beam shape cursor on startup.
|
|
precmd() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
|
|
|
|
# Work with brackets/quotes
|
|
# ci", ci', ci`, di", etc
|
|
autoload -U select-quoted
|
|
zle -N select-quoted
|
|
for m in visual viopp; do
|
|
for c in {a,i}{\',\",\`}; do
|
|
bindkey -M $m $c select-quoted
|
|
done
|
|
done
|
|
# ci{, ci(, ci<, di{, etc
|
|
autoload -U select-bracketed
|
|
zle -N select-bracketed
|
|
for m in visual viopp; do
|
|
for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do
|
|
bindkey -M $m $c select-bracketed
|
|
done
|
|
done
|
|
# surround
|
|
autoload -Uz surround
|
|
zle -N delete-surround surround
|
|
zle -N add-surround surround
|
|
zle -N change-surround surround
|
|
bindkey -a cs change-surround
|
|
bindkey -a ds delete-surround
|
|
bindkey -a ys add-surround
|
|
|
|
# __________________
|
|
# __ __ \_ /___ /_____________________
|
|
# _ / / / __/_ __ \ _ \_ ___/_ ___/
|
|
# / /_/ // /_ _ / / / __/ / _(__ )
|
|
# \____/ \__/ /_/ /_/\___//_/ /____/
|
|
#
|
|
# Basics
|
|
bindkey -M viins 'jk' vi-cmd-mode # noone likes Esc
|
|
bindkey -M viins ' ' magic-space
|
|
# bindkey -M viins '^I' expand-or-complete-prefix
|
|
bindkey -M viins '^U' backward-kill-line
|
|
bindkey -M viins '^K' kill-line
|
|
bindkey -M viins '^W' backward-kill-word
|
|
bindkey -M viins '^B' backward-word
|
|
bindkey -M viins '^F' forward-word
|
|
bindkey -M viins '^G' push-line-or-edit
|
|
bindkey -M viins '^A' beginning-of-line
|
|
bindkey -M viins '^E' end-of-line
|
|
bindkey -M viins '^S' history-incremental-pattern-search-backward
|
|
|
|
bindkey -M vicmd '^U' backward-kill-line
|
|
bindkey -M vicmd '^K' kill-line
|
|
bindkey -M vicmd 'H' run-help
|
|
|
|
# Shift + Tab
|
|
bindkey -M viins '^[[Z' reverse-menu-complete
|
|
|
|
# Open current prompt in external editor
|
|
autoload -Uz edit-command-line; zle -N edit-command-line
|
|
bindkey '^[ ' edit-command-line
|
|
|
|
# Fix the DEL key
|
|
bindkey -M vicmd "^[[3~" delete-char
|
|
bindkey "^[[3~" delete-char
|
|
|
|
# Use vim keys in tab complete menu
|
|
bindkey -M menuselect '^H' vi-backward-char
|
|
bindkey -M menuselect '^J' vi-down-line-or-history
|
|
bindkey -M menuselect '^K' vi-up-line-or-history
|
|
bindkey -M menuselect '^L' vi-forward-char
|
|
bindkey -M menuselect 'left' vi-backward-char
|
|
bindkey -M menuselect 'down' vi-down-line-or-history
|
|
bindkey -M menuselect 'up' vi-up-line-or-history
|
|
bindkey -M menuselect 'right' vi-forward-char
|
|
|
|
# C-z to toggle current process (background/foreground)
|
|
fancy-ctrl-z () {
|
|
if [[ $#BUFFER -eq 0 ]]; then
|
|
BUFFER="fg"
|
|
zle accept-line
|
|
else
|
|
zle push-input
|
|
zle clear-screen
|
|
fi
|
|
}
|
|
zle -N fancy-ctrl-z
|
|
bindkey '^Z' fancy-ctrl-z
|