ZSH: menú seleccione autocompletado para búsqueda de historial

ZSH: menú seleccione autocompletado para búsqueda de historial

ZSH tiene un potente menú de selección de autocompletado, por ejemplo, para elegir un directorio, elegir un proceso con matar (kill[tab][tab]). Puede utilizar flechas para navegar por las opciones.

¿Es posible tener también el menú emergente para la búsqueda del historial (CTRL+R)? ¿De tal manera que el menú permita navegar por las coincidencias de la barra de búsqueda CTRL+R actual?

Respuesta1

Sé que esto está lejos de lo que estás pidiendo, pero podría resolver tu problema subyacente.

Hay una extensión de historial de shell que le muestra una página llena de resultados cuando busca en el historial. También le muestra resultados relevantes primero según el directorio actual, el repositorio git, el estado de salida y el host.

Puedes instalar el proyecto aquí:https://github.com/curusarn/resh
Ejecútelo usando CTRL+ R(reemplaza la búsqueda inversa).
Así es como se ve la aplicación de búsqueda:

captura de pantalla de la aplicación de búsqueda

Descargo de responsabilidad: soy el creador del proyecto y esto es una autopromoción descarada.

Respuesta2

zsh-navigation-toolshace algo como esto. Si usa oh-my-zsh, solo necesita agregarlo zsh-navigation-toolsen plugins=(...)su .zshrcluego Ctrl-R le dará un historial de desplazamiento con arriba/abajo y búsqueda/filtrado. Puedes usarlo sin oh-my-zsh pero la configuración parece más trabajosa.

Respuesta3

  1. No que yo sepa.

  2. Tal vezdeseas probar predict-on, que hace algo relacionado con lo que estás preguntando:

    autoload -U predict-on
    zle -N predict-on
    zle -N predict-off
    bindkey '^X1' predict-on
    bindkey '^X2' predict-off
    

Respuesta4

Eso es posible; En principio modifiqué la _killfinalización para que funcione también para eventos históricos.

He aquí un ejemplo; después de seleccionar una entrada, presione [ENTER] una vez para aceptar el número de evento (la línea de comando dice entonces fe hc 780) y presione [ENTER] nuevamente para ejecutar el comando. (Úselo fcen lugar de hcsi desea modificar la línea de comando antes de la ejecución).

$ hc Makefile[TAB]
history event
 1906  9.3.2013 18:10  vi Makefile
 1867  9.3.2013 17:26  less Makefile
  780  3.2.2013 17:54  cat Makefile                
  776  3.2.2013 17:51  cat ../Makefile     

Para usarlo, coloque los archivos adjuntos en un directorio en su $fpathy agregue estas líneas en su ~/.zshrc:

zstyle ':completion:*:historyevent' command 'fc -dE -lr 1'
zstyle ':completion:*:historyevent' sort no

Finalmente, inicie una nueva zshsesión.

Cuidado, es una solución rápida y sucia, pero funcionó bien desde hace algún tiempo.


_historiaevent

#autoload

local out histevent list expl match desc listargs all nm ret=1

_tags historyevent || return 1

all=(-U)
match="*[[:blank:]]*[[/[:blank:]]$PREFIX*$SUFFIX*"
nm="$compstate[nmatches]"

out=( "${(@f)$(_call_program historyevent fc -l 2>/dev/null)}" )
desc="$out[1]"
out=( "${(@M)out[2,-1]:#${~match}}" )

histevent=( "${(@)${(@M)out##[^0-9]#[0-9]#}##*[[:blank:]]}" )

if zstyle -T ":completion:${curcontext}:historyevent" verbose; then
  list=( "${(@Mr:COLUMNS-1:)out}" )
  desc=(-ld list)
else
  desc=()
fi

_wanted processes expl 'history event' \
    compadd "$@" "$desc[@]" "$all[@]" -a - histevent && ret=0

if [[ -n "$all" ]]; then
  zstyle -s ":completion:${curcontext}:historyevent" insert-ids out || out=menu

  case "$out" in
  menu)   compstate[insert]=menu ;;
  single) [[ $compstate[nmatches] -ne nm+1 ]] && compstate[insert]= ;;
  *)      [[ ${#:-$PREFIX$SUFFIX} -gt ${#compstate[unambiguous]} ]] &&
              compstate[insert]=menu ;;
  esac
fi

return ret

_fc

#compdef fc

local curcontext="$curcontext" line state ret=1

_arguments -C \
   '-e[editor command]' \
   '-l[list last history events]' \
   '-n[suppress numbers]' \
   '-r[reverse order]' \
   '*:history event:->historyevent' && ret=0

if [[ -n "$state" ]]; then
  _alternative \
    'historyevent:: _historyevent' && ret=0
fi

return ret

información relacionada