# vim: ft=zsh KEYTIMEOUT=1 # Activate vim mode. bindkey -v bindkey -M visual 'i' vi-insert bindkey -M visual 'a' vi-add-next # Yank to the system clipboard function vi-yank-xclip { zle vi-yank echo -n "$CUTBUFFER" | \copy } zle -N vi-yank-xclip bindkey -M visual 'y' vi-yank-xclip bindkey ' ' magic-space bindkey '^K' up-line-or-history # C-k bindkey -M vicmd '^K' up-line-or-history # C-k bindkey '^J' down-line-or-history # C-j bindkey -M vicmd '^J' down-line-or-history # C-j bindkey '^U' kill-whole-line # C-u bindkey -M vicmd '^U' kill-whole-line # C-u bindkey -M viins '\e.' insert-last-word # M-. bindkey '^[[Z' reverse-menu-complete # S-Tab bindkey -M viins '`' autosuggest-accept bindkey -M vicmd '`' autosuggest-accept bindkey -M viins '^?' backward-delete-char bindkey -M vicmd '^?' backward-delete-char bindkey -M viins '^W' backward-delete-word bindkey -M vicmd '^W' backward-delete-word bindkey -M viins '^H' backward-delete-char bindkey -M vicmd '^H' backward-delete-char insert-sudo() { local sudo_template="${SUDO:=sudo} " local template_len="${#sudo_template}" if [ -z "${LBUFFER}${RBUFFER}" ]; then zle up-history if [ ! "${LBUFFER::$template_len}" = "$sudo_template" ]; then LBUFFER="${sudo_template}${LBUFFER}" fi return fi if [ "${LBUFFER::$template_len}" = "$sudo_template" ]; then LBUFFER="${LBUFFER:$template_len}" else LBUFFER="${sudo_template}${LBUFFER}" fi } zle -N insert-sudo bindkey -M vicmd '^S' insert-sudo # C-s bindkey -M viins '^S' insert-sudo # C-s popdquiet() { popd &>/dev/null zle reset-prompt } zle -N popdquiet bindkey "^P" popdquiet bindkey -M vicmd "^P" popdquiet cddotdot() { cd .. zle reset-prompt } zle -N cddotdot bindkey "^O" cddotdot bindkey -M vicmd "^O" cddotdot fzfhistory() { LBUFFER="$( \ history -n 0 | \ fzf \ --ignore-case \ --scheme=history \ --tac \ --no-multi \ --tiebreak=begin,index \ --height="$(($LINES/4))" \ --query="$BUFFER" \ )" zle reset-prompt } zle -N fzfhistory bindkey "^R" fzfhistory bindkey -M vicmd "^R" fzfhistory