En tcsh
, los comandos \eP
y \eN
tienen 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
, tcsh
obtengo
% git pull upstream feature-dancing-pigs
si presiono , obtengo un elemento del historial que coincide exactamente con el \eP
comandozsh
% git clone
Quiero configurar zsh
para emular el tcsh
comportamiento. ¿Es posible?
Lo intenté zsh
con 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 zshcontrib
llamada 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 FUNCTIONS
secció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