navegación histórica similar a zsh tcsh

navegación histórica similar a zsh tcsh

En tcsh, los comandos \ePy \eNtienen en cuenta el prefijo normalizado con espacios en blanco de la línea actual, no solo la primera palabra.

Por ejemplo, si mi historial contiene

git pull upstream feature-dancing-pigs
git clone

y escribo

% git pull

y luego presiono \eP, tcshobtengo

% git pull upstream feature-dancing-pigs

si presiono , obtengo un elemento del historial que coincide exactamente con el \ePcomandozsh

% git clone

Quiero configurar zshpara emular el tcshcomportamiento. ¿Es posible?

Lo intenté zshcon la configuración de clave predeterminada de emacs y con un explícito

bindkey "\eP" history-search-backward

Como resulta

bindkey "\eP" history-beginning-search-backward

tiene el comportamiento esperado que estaba usando ^[inicialmente en lugar de \e.

Respuesta1

Hay una función documentada en zshcontribllamada up-line-or-beginning-search, puedes verla ejecutándola.

man zshcontrib | less '+/^\s*up-line-or-beginning-search'

Estos widgets son similares a las funciones integradas up-line-or-search y down-line-or-search: si están en un búfer multilínea, se mueven hacia arriba o hacia abajo dentro del búfer; de lo contrario, buscan una línea del historial que coincida con el inicio del línea actual. En este caso, sin embargo, buscan una línea quecoincide con la línea actual hasta la posición actual del cursor, a la manera de historia-comienzo-búsqueda-hacia atrás y hacia adelante,en lugar de la primera palabra en la línea.

si nos fijamos en las instrucciones dadas en la parte superior de la ZLE FUNCTIONSsección enman zshcontrib

FUNCIONES ZLE
Widgets
Todas estas funciones implementan widgets ZLE definidos por el usuario (ver zshzle(1)) que pueden vincularse a pulsaciones de teclas en shells interactivos. Para usarlos, su .zshrc debe contener líneas del formulario
autoload function
zle -N function

Personalmente he seguido las instrucciones anteriores, pero sospecho que hoy en día quizás no necesites... en tu~/.zshrc

# register the function with the autoloader
autoload -U up-line-or-beginning-search
# define new zle widget
zle -N up-line-or-beginning-search
# bind UP key
[[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-beginning-search

información relacionada