zhk2369 发表于 2018-8-23 07:54:09

开启终极效率shell之旅(1)

# Incremental completion for zsh  
# by y.fujii , public domain
  

  

  
autoload -U compinit
  
zle -N self-insert self-insert-incr
  
zle -N vi-cmd-mode-incr
  
zle -N vi-backward-delete-char-incr
  
zle -N backward-delete-char-incr
  
zle -N expand-or-complete-prefix-incr
  
compinit
  

  
bindkey -M viins '^[' vi-cmd-mode-incr
  
bindkey -M viins '^h' vi-backward-delete-char-incr
  
bindkey -M viins '^?' vi-backward-delete-char-incr
  
bindkey -M viins '^i' expand-or-complete-prefix-incr
  
bindkey -M emacs '^h' backward-delete-char-incr
  
bindkey -M emacs '^?' backward-delete-char-incr
  
bindkey -M emacs '^i' expand-or-complete-prefix-incr
  

  
unsetopt automenu
  
compdef -d scp
  
compdef -d tar
  
compdef -d make
  
compdef -d java
  
compdef -d svn
  
compdef -d cvs
  

  
# TODO:
  
#   cp dir/
  

  
now_predict=0
  

  
function limit-completion
  
{
  if ((compstate6)); then
  compstate
=""
  zle -M "too many matches."
  fi
  
}
  

  
function correct-prediction
  
{
  if ((now_predict == 1)); then
  if [[ "$BUFFER" != "$buffer_prd" ]] || ((CURSOR != cursor_org)); then
  now_predict=0
  fi
  fi
  
}
  

  
function remove-prediction
  
{
  if ((now_predict == 1)); then
  BUFFER="$buffer_org"
  now_predict=0
  fi
  
}
  

  
function show-prediction
  
{
  # assert(now_predict == 0)
  if
  ((PENDING == 0)) &&
  ((CURSOR > 1)) &&
  [[ "$PREBUFFER" == "" ]] &&
  [[ "$BUFFER" != " " ]]
  then
  cursor_org="$CURSOR"
  buffer_org="$BUFFER"
  comppostfuncs=(limit-completion)
  zle complete-word
  cursor_prd="$CURSOR"
  buffer_prd="$BUFFER"
  if [[ "$buffer_org" == "$buffer_prd" ]]; then
  CURSOR="$cursor_org"
  if [[ "$buffer_org" != "$buffer_prd" ]] || ((cursor_org != cursor_prd)); then
  now_predict=1
  fi
  else
  BUFFER="$buffer_org"
  CURSOR="$cursor_org"
  fi
  echo -n "\e[32m"
  else
  zle -M ""
  fi
  
}
  

  
function preexec
  
{
  echo -n "\e[39m"
  
}
  

  
function vi-cmd-mode-incr
  
{
  correct-prediction
  remove-prediction
  zle vi-cmd-mode
  
}
  

  
function self-insert-incr
  
{
  correct-prediction
  remove-prediction
  if zle .self-insert; then
  show-prediction
  fi
  
}
  

  
function vi-backward-delete-char-incr
  
{
  correct-prediction
  remove-prediction
  if zle vi-backward-delete-char; then
  show-prediction
  fi
  
}
  

  
function backward-delete-char-incr
  
{
  correct-prediction
  remove-prediction
  if zle backward-delete-char; then
  show-prediction
  fi
  
}
  

  
function expand-or-complete-prefix-incr
  
{
  correct-prediction
  if ((now_predict == 1)); then
  CURSOR="$cursor_prd"
  now_predict=0
  comppostfuncs=(limit-completion)
  zle list-choices
  else
  remove-prediction
  zle expand-or-complete-prefix
  fi
  
}


页: [1]
查看完整版本: 开启终极效率shell之旅(1)