¿Cómo reenviar el historial de búsqueda con el comando reverse-i-search (ctrl + r)?

12

En el manual de readline

# man readline

A continuación se describe cómo buscar hacia atrás y hacia adelante.

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

Cuando presiono ctrl + r y escribo "apt-get", puedo hacer un historial de búsqueda inversa tocando continuamente ctrl + r. Pero luego toco ctrl + sy el terminal no avanza. ¿Estoy haciendo algo incorrecto?

Además, ¿qué clave representa el prefijo Meta "M-"?

usuario784637
fuente

Respuestas:

15

La secuencia C-sse toma del controlador de terminal, como puede ver en

stty -a | grep '\^S'

Para liberar la secuencia para que la use readline, configure la secuencia de terminal de detención en otra secuencia, como por ejemplo

stty stop ^J

o eliminarlo por completo con

stty stop undef

Después de eso C-sfuncionaría en la terminal dada.

Configúrelo ~/.bashrcpara que funcione en cada terminal.

La M-secuencia significa la Altclave, como ya se señaló.

enzotib
fuente
^ J es una buena opción ya que stop, para , no se usa para nada más
hobs
3

Además de asignar un carácter TTY 'stop' diferente como se sugirió anteriormente, puede eliminarlo por completo si no planea usarlo (tiendo a no hacerlo), así:

$ stty stop undef

Entonces readline puede usar controles-s para la búsqueda hacia adelante y no obtendrá ningún comportamiento extraño debido a la adición de un nuevo stop char.

ntnt
fuente
Esta es una manera mucho mejor.
A.Danischewski
1

forward-search-history (Cs) no funciona (aunque está en la página del manual).

'M-' representa el modificador de la tecla Alt.

Gödel
fuente
1
No corrige la C-sparte, mira mi respuesta.
enzotib
0

Por favor, no use:

stty stop ^J

pero

stty stop ^P

o cualquier otra cosa, ya que ^Jhace grandes problemas con ssh. (No sé por qué de todos modos.) Después de iniciar sesión Entery la barra invertida no funcionaba. o tuve que escribir:

stty sane 
export TERM=linux

antes de querer escribir

ssh root@192...

entonces

stty stop ^P

resolvió ambos problemas al mismo tiempo.

xerostomus
fuente
0

Puede deshabilitar el control de flujo XON / XOFF:

stty -ixon

en su ~ / .profile o similar, entonces Ctrl + S será reconocido.

Ejemplo

Steven Penny
fuente
0

Para avanzar cuando se usa la búsqueda inversa (con el comando Ctrl-R):

  1. Abra su archivo .bashrc:
    sudo gedit ~/.bashrc

  2. agregue esta línea (la letra "f" se puede reemplazar por otra que el sistema aún no haya utilizado)

    bind '"\C-f": forward-search-history' 
    
  3. Cierre su archivo y actualice su .bashrc (o abra otra terminal) con el comando:
    source ~/.bashrco. ~/.bashrc

AHORA PUEDES AVANZAR EN LA HISTORIA CON EL ACCESO CORTO: Ctrl + f

Trabajando en Ubuntu 18.04 LTS

Franklin TN
fuente
0

Tenga en cuenta que había usado

stty stop ^J
stty -ixoff

en .bashrc para habilitar la búsqueda hacia adelante y deshabilitar el molesto mensaje "La salida ha sido suspendida presionando Ctrl + S. Presione Ctrl + Q para reanudar" mensaje en Konsole cuando se presionó ctrl + s, pero ambos comandos rompieron individualmente la integración de Konsole en Dolphin ( el acceso directo "F4") en la forma en que tuve que hacer ctrl + c dos veces para que funcione, y los comandos automáticos "cd" no se inyectaron al navegar gráficamente.

Entonces ahora prefiero:

stty stop undef
stty -ixon

Tiene el mismo efecto, todo parece funcionar como se esperaba;)

NoGa
fuente