dotfiles/config/zsh/vi-mode.zsh

57 lines
1.7 KiB
Bash

set_cursor_shape() {
local block='\e[1 q' # blinking block
local underline='\e[3 q' # blinking underline, 4 for steady
local bar='\e[5 q' # blinkind bar, 6 for steady
if [[ -n "$ITERM_SESSION_ID" && -z "$TMUX" ]] {
block='\e]1337;CursorShape=0\a'
bar='\e]1337;CursorShape=1\a'
underline='\e]1337;CursorShape=2\a'
}
case "$1" in
block) echo -n $block ;;
bar) echo -n $bar ;;
underline) echo -n $underline ;;
esac
}
# Start new prompts with bar shaped cursor.
init_line_editor() {
set_cursor_shape bar
}
# Switch cursor shape depending on editing mode.
keymap_did_change() {
case $KEYMAP in
vicmd) set_cursor_shape block ;;
viins|main) set_cursor_shape bar ;;
esac
}
zle -N zle-line-init init_line_editor
zle -N zle-keymap-select keymap_did_change
# Use vi mode for line editing.
bindkey -v
export KEYTIMEOUT=1
# Restore some common and useful emacs mode shortcuts.
bindkey -M viins '^a' vi-beginning-of-line
bindkey -M viins '^e' vi-end-of-line
bindkey -M viins '^l' clear-screen
bindkey -M viins '^[.' insert-last-word
# Search through history in insert mode.
bindkey -M viins '^j' history-beginning-search-forward
bindkey -M viins '^k' history-beginning-search-backward
# Incremental search
bindkey -M viins '^r' history-incremental-search-backward
bindkey -M isearch '^j' history-incremental-search-forward
bindkey -M isearch '^k' history-incremental-search-backward
bindkey -M isearch '^y' accept-search
# Move word-wise with Alt.
bindkey -M viins '^[b' vi-backward-word
bindkey -M viins '^[f' vi-forward-word