Comment modifier l'achèvement de l'historique des bash pour terminer ce qui est déjà en ligne?

133

J'ai trouvé une commande il y a quelques mois qui a rendu mon historique de bash auto-complet sur ce qui est déjà sur la ligne en appuyant sur la flèche vers le haut:

$ vim fi

presse

$ vim file.py

J'aimerais l'installer sur mon nouvel ordinateur, car cela permet de gagner beaucoup de temps lors de la conservation d'un grand historique. Le problème est que je ne peux pas me souvenir de l'endroit où cela a été mentionné et que la lecture des références et des tutoriels interminables de bash n'a malheureusement pas non plus aidé.

Quelqu'un connaît-il la commande?

blokkie
la source

Réponses:

223

Probablement quelque chose comme

# ~ / .inputrc
"\ e [A": recherche dans l'historique en arrière
"\ e [B": recherche dans l'historique

ou équivalent,

# ~ / .bashrc
si [[$ - == * i *]]
puis
    bind '"\ e [A": historique-recherche-arrière'
    bind '"\ e [B": historique-recherche-avant'
Fi

(l'instruction if vérifie le mode interactif)

Normalement, Up et Down sont liés aux fonctions Readline previous-historyet next-historyrespectivement. Je préfère lier PgUp / PgDn à ces fonctions, au lieu de déplacer le fonctionnement normal de Up / Down.

# ~ / .inputrc
"\ e [5 ~": recherche dans l'historique en arrière
"\ e [6 ~": recherche dans l'historique

Après avoir modifié ~/.inputrc, redémarrez votre shell ou utilisez Ctrl+ X, Ctrl+ Rpour lui dire de relire ~/.inputrc.


Au fait, si vous recherchez une documentation pertinente:

Bash utilise la bibliothèque GNU Readline pour l'invite et l'historique du shell.

éphémère
la source
Merci pour votre réponse. Cela semble familier, mais ne fonctionne malheureusement pas pour moi. Le placer dans .inputrc ne change rien et le mettre dans .bashrc empêche les flèches de faire quoi que ce soit. Des idées?
blokkie
Ça ne fait rien. history-complete- * n'existe pas; seules les fonctions de recherche d'historique * existent. Merci!
blokkie
Ah, j'ai clairement mal tapé les deux premiers exemples là-bas ... le dernier était correct, cependant. Je vais arranger ça.
éphémère
@ user1037114: c'est une question en soi, vous devriez la poser sur son propre message.
kamaradclimber
Cela a corrigé les flèches haut / bas pour moi en utilisant le mode vi dans bash. Remarque, je dois appuyer sur "Echap" (mode commande) pour que cela fonctionne.
Chris
5

Mettez à jour .inputrc avec les éléments suivants:

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

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward
nate_weldon
la source
4
Quelles sont ces clés?
Chris
Je ne sais pas ce que ces touches sont spécifiquement, mais cette réponse a corrigé cette fonctionnalité pour moi lorsque les touches haut et bas ne faisaient pas de recherche dans l'historique en utilisant tmux et st terminal sur X11.
razzintown
1
@razzintown pour st que vous avez probablement set enable-keypad onpour que la delclé fonctionne correctement ( faq ). Lorsque le clavier est activé, les touches fléchées sont "\C-[OA"et "\C-[OB"(et "\C-[OC"et "\C-[OD"). J'ai posté une réponse ci-dessous pour clarifier cela.
MauricioRobayo
@Chris Ce sont les touches fléchées haut et bas du mode clavier et les touches fléchées haut et bas du mode ANSI. Voir ma réponse ci-dessous.
MauricioRobayo
3

Si set enable-keypad onc'est le ~/.inputrccas de certains utilisateurs ( terminal simple sans succion ), sachez que les touches fléchées sont en mode clavier. Ubuntu est livré avec ceci utile /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

Je ne suis donc pas sûr que vous ayez besoin de tout, mais cela ne fera pas de mal d'avoir dans votre ~/.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

C'est aussi sur le même sujet: Mes touches de curseur ne fonctionnent pas et aussi ce xterm: touches spéciales

MauricioRobayo
la source
1

Avec ohmyzsh, utilisez ceci dans votre .zshrc :

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

Pour recharger source ~/.zshrcou relancer le terminal.

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

Benjamin Crouzier
la source
Ce qui a fonctionné pour moi sur zsh était l'option donnée dans le lien source: bindkey '\ e [A' history-search-backward bindkey '\ e [B' history-search-forward
Michael Massey
-3

Vous devrez peut-être activer la complétion bash.

Vérifier

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

pour voir si l'un des fichiers ci-dessus source /etc/bash_completion. c'est à dire

. / etc / bash_completion

S'il /etc/bash___completionne provient d'aucun des fichiers ci-dessus, vous devrez l'ajouter à l'un d'entre eux.

Si vous voulez que tous les utilisateurs bash de votre machine aient l'achèvement bash, source à /etc/bash_completionpartir de /etc/bash.bashrc.

Si ce n'est que vous qui voulez l'achèvement de bash, source /etc/bash_completionde votre ~/.bashrc.

Condamné
la source
2
La finition des onglets est agréable, mais pas la même chose que le rappel de l'histoire, ce que l'affiche originale demandait.
éphémère