¿Cómo cambio la finalización del historial de bash para completar lo que ya está en la línea?

133

Encontré un comando hace un par de meses que hizo que mi historial de bash se completara automáticamente en lo que ya estaba en la línea al presionar la flecha hacia arriba:

$ vim fi

prensa

$ vim file.py

Me gustaría configurar esto en mi nueva computadora, porque ahorra mucho tiempo al mantener un gran historial. El problema es que, por mi vida, no puedo recordar dónde se mencionó y leer desafortunadamente referencias interminables y tutoriales desafortunadamente tampoco ayudó.

¿Alguien sabe el comando?

blokkie
fuente

Respuestas:

223

Probablemente algo como

# ~ / .inputrc
"\ e [A": historial-búsqueda-hacia atrás
"\ e [B": historial-búsqueda-adelante

o equivalente,

# ~ / .bashrc
si [[$ - == * i *]]
luego
    enlace '"\ e [A": historial-búsqueda-hacia atrás'
    enlace '"\ e [B": history-search-forward'
fi

(la instrucción if verifica el modo interactivo)

Normalmente, Arriba y Abajo están vinculados a las funciones de Readline previous-historyy next-historyrespectivamente. Prefiero vincular PgUp / PgDn a estas funciones, en lugar de desplazar el funcionamiento normal de Up / Down.

# ~ / .inputrc
"\ e [5 ~": historial-búsqueda-hacia atrás
"\ e [6 ~": historial-búsqueda-adelante

Después de modificar ~/.inputrc, reinicie su shell o use Ctrl+ X, Ctrl+ Rpara indicarle que vuelva a leer ~/.inputrc.


Por cierto, si está buscando documentación relevante:

Bash usa The GNU Readline Library para la línea de comandos e historial.

efímero
fuente
Gracias por tu respuesta. Esto me suena familiar, pero desafortunadamente no funciona para mí. Colocarlo en .inputrc no cambia nada y ponerlo en .bashrc evita que las flechas hagan nada. ¿Algunas ideas?
blokkie
No importa. history-complete- * no existe; solo existen las funciones history-search- *. ¡Gracias!
blokkie
Ah, claramente escribí mal los dos primeros ejemplos allí ... sin embargo, el último era correcto. Lo arreglaré.
ephemient
@ user1037114: esta es una pregunta en sí misma, debe formularla en su propia publicación.
kamaradclimber
Esto solucionó las flechas arriba / abajo para mí usando el modo vi en bash. Tenga en cuenta que tengo que presionar "Esc" (modo de comando) para que funcione.
Chris
5

Actualice .inputrc con lo siguiente:

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward
nate_weldon
fuente
44
¿Qué son esas llaves?
Chris
No sé cuáles son estas teclas específicamente, pero esta respuesta solucionó esta funcionalidad para mí cuando las teclas arriba y abajo no hicieron la búsqueda del historial mientras usaban el terminal tmux y st en X11.
razzintown
1
@razzintown para st probablemente tenga set enable-keypad onla delclave para que funcione correctamente ( faq ). Cuando el teclado está activado, las teclas de flecha son "\C-[OA"y "\C-[OB"(y "\C-[OC"y "\C-[OD"). Publiqué una respuesta a continuación para aclarar esto.
MauricioRobayo
@ Chris Estas son las teclas de flechas arriba y abajo del modo de teclado y las teclas de flechas arriba y abajo del modo ANSI. Mira mi respuesta a continuación.
MauricioRobayo
3

Si set enable-keypad onestá en su posición ~/.inputrccomo podrían hacerlo algunos usuarios de st ( suckless simple terminal ), tenga en cuenta que las teclas de flechas están en modo de teclado. Ubuntu viene con esto útil /usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

Por lo tanto, no estoy seguro de si lo necesitará todo, pero es posible que no le duela tener en su ~/.inputrc:

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char

# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

Esto también trata el mismo tema: Mis teclas de cursor no funcionan y también este xterm: teclas especiales

MauricioRobayo
fuente
1

Con ohmyzsh, usa esto en tu .zshrc :

bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

Para recargar, source ~/.zshrco relanzar terminal.

Fuente: https://superuser.com/a/418299/71680

Benjamin Crouzier
fuente
Lo que funcionó para mí en zsh fue la opción dada en el enlace de origen: bindkey '\ e [A' history-search-backward bindkey '\ e [B' history-search-forward
Michael Massey
-3

Es posible que deba habilitar la finalización de bash.

Cheque

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

para ver si alguno de los archivos anteriores fuente /etc/bash_completion. es decir

. / etc / bash_completion

Si /etc/bash___completionninguno de los archivos anteriores lo obtiene, deberá agregarlo a uno de ellos.

Si desea que todos los usuarios de bash en su máquina tengan finalización de bash, fuente /etc/bash_completionde /etc/bash.bashrc.

Si solo eres tú quien quiere completar bash, busca /etc/bash_completiontu fuente ~/.bashrc.

Condenar
fuente
2
La finalización de la pestaña es agradable, pero no es lo mismo que la recuperación del historial, que es lo que pedía el póster original.
ephemient