Bash ofrece la funcionalidad de búsqueda inversa a través de Ctrl+ R. Entonces uno puede escribir una parte de un comando que mostrará una entrada adecuada del historial.
Supongamos que esta es mi historia:
vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?
Busco foo
. Al presionar Ctrl+ Rnuevamente se muestra la siguiente entrada de búsqueda adecuada. A menudo me sucede que soy demasiado rápido y navego más allá de mi resultado deseado y vim foo3
se muestra y ahora quiero volver a vim foo2
.
Por lo tanto, mi pregunta es: ¿Cómo navego dentro de la búsqueda inversa?
bash
command-history
search
k0pernikus
fuente
fuente
Respuestas:
Puede acceder a esto a través de la
forward-search-history
función que está vinculada por defecto a ctrl+s. Desafortunadamente, ctrl+sse usa para señalarxoff
por defecto, lo que significa que no puede usarlo para cambiar la dirección de la búsqueda. Hay dos soluciones para resolver el problema, una deshabilita el envío de laxoff/xon
señalización y la otra cambia la combinación de teclas paraforward-search-history
Deshabilitar xon / xoff
Ejecuta
stty -ixon
en tu terminal o agrégalo a tu~/.bashrc
. Esto le permite usar ctrl+spara usar laforward-search-history
función de historial.Para obtener más información sobre el flujo de control, consulte ¿Cómo descongelar después de presionar accidentalmente Ctrl-S en un terminal? y algunas de las respuestas
Cambiar la combinación de teclas
Si no desea cambiar el comportamiento predeterminado de ctrl+s, puede cambiar la combinación de teclas
forward-search-history
conbind
. Como la mayoría de las claves ya están definidas en bash, es posible que deba ser creativo:Esto se unirá ctrl+tal historial de búsqueda hacia adelante, pero tenga en cuenta que, por defecto, se ctrl+tejecuta
transpose-chars
fuente
stty -ixon
enzsh
y funciona muy bien. Sin embargo, ¿hay algún efecto secundario posiblemente no deseado en la desactivación de laxoff/xon
señalización?ctrl+s
para pausar la salida del terminal por más tiempo. Si nunca lo usaste antes, esto no es problemaC-s
... muy útil cuando se usa tail en los registros del servidor. Ordenado ! (Ojalá tuviera otro voto a favor :))bind '"\C-t": history-search-forward'
Como alternativa a la búsqueda inversa básica y la búsqueda hacia adelante proporcionadas por su bash, es posible que desee considerar:
fzf , un "buscador difuso de línea de comandos" autodescrito.
Puede reemplazar la búsqueda inversa predeterminada de su bash (y otros terminales).
Sus beneficios son que:
Mi flujo de trabajo ahora se basa completamente en fzf sobre la búsqueda inversa básica en máquinas sobre las que tengo control.
fuente