Achèvement de la ligne de commande à partir de l'historique des commandes

85

Donc, j'ai regardé l'histoire et Ctrl+ R, mais ce n'est pas ce que je pensais savoir. Est-il possible de taper le début d'une commande et de parcourir les correspondances de mon historique avec un raccourci bash?

# mysq(some shortcut key)

Donne moi:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p
Ben Dauphinee
la source
Note latérale: Il y a '<kbd> Alt + Tab </ kbd>' pour les terminaux sans bureau.
neverMind9

Réponses:

91

Appuyez sur Ctrl+ Rpour ouvrir la recherche d’historique inversé. Maintenant, commencez à taper votre commande, cela donnera la première correspondance. En appuyant à nouveau sur Ctrl+ R(et à nouveau), vous pouvez parcourir l'historique.

mysq(Ctrl+R)

Donnerait:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rencore:

mysql -u ben.dauphinee -p
remuer
la source
5
Merci. De plus, Echap mettra la commande sélectionnée sur votre ligne de commande sans s'exécuter, tandis que la commande Entrée exécutera la commande sélectionnée.
Ben Dauphinee le
3
Je trouve que CTRL + E est meilleur pour cela que ESC, car échapper est difficile à atteindre mais je frappe déjà CTRL + R, donc E est là. Cela positionne également le curseur à la fin de la ligne, ce qui est pratique dans le cas où je voudrais changer quelque chose (comme un nom de fichier) que je trouve être un cas courant.
Sorpigal
Malheureusement, ça ne marche pas sur Cygwin
ATorras le
2
Sur mac, du moins, il semble mysq(CTRL+R)(CTRL+R)que les commandes commençant par «mysq» ne soient pas parcourues. Vous devez faire la (CTRL+R)mysq(CTRL+R)place
BlueRaja - Danny Pflughoeft
62

Pour approfondir ce que Gilles a dit, j’ai le texte suivant .inputrcpour lier les flèches haut / bas à history-search-backwardet history-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Il suffit de taper quelque chose (facultatif), puis d'appuyer sur les touches fléchées haut / bas pour parcourir l'historique des commandes commençant par ce que vous avez saisi.

Pour ce faire , au .bashrclieu de .inputrc, vous pouvez utiliser:

bind '"\e[A": history-search-backward'
Raychi
la source
3
ceux qui lient appartiennent à ~ / .inputrc ... merci de soutenir ma paresse.
Martin Zeitler
Il est à noter que le '\ e' est crucial, du moins pour les débutants bash. Taper Ctrl-V pour obtenir la frappe de votre commande ne raconte pas toute l'histoire. Par exemple, taper Ctrl-V Meta-P (c'est-à-dire Alt-P) renvoie ^ [p - pour obtenir le comportement souhaité, remplacez le "^ [" par "\ e".
MrMas
D'accord avec @syslogic - placez les lignes dans .inputrc et supprimez les guillemets simples et liés.
MrMas
copier-coller ceci dans .inputrc sur osx, je reçois: source ~ / .inputrc -bash: \ e [commande :: non trouvée -bash: \ e [B :: commande non trouvée -bash: \ eOA :: commande not found -bash: \ eOB :: commande not found
Walrus the Cat le
1
Voir superuser.com/questions/241187/how-do-i-reload-inputrc . Vous ne pouvez pas source le fichier.
Raychi
7

Vous pouvez également appuyer sur le PAGEUPbouton pour compléter automatiquement une commande. Il recherche essentiellement le bash_historyfichier.

0aslam0
la source
Vous devez décommenter deux lignes /etc/inputrcou ajouter ces deux lignes à votre $HOME/.inputrcfichier: "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix
5

Vous pouvez utiliser les commandes readline history-search-backwardet history-search-forwardnaviguer entre les lignes de commande commençant par le préfixe que vous avez déjà saisi. Aucune de ces commandes n'est liée à des clés dans la configuration par défaut.

Zsh (zle) a des commandes similaires history-beginning-search-backwardet history-beginning-search-forwardn'est pas non plus lié aux touches par défaut. Il existe aussi history-search-backwardet history-search-forward, qui utilise le premier mot de la commande en cours comme préfixe pour effectuer une recherche, quelle que soit la position du curseur.

Gilles
la source
4

Si vous voulez un bon aperçu de commandes très similaires, vous pouvez obtenir une liste avec:

history|grep KEYSTRING

Ensuite, copiez et collez avec le bouton central de votre souris.

Rgds - Joe

joe_zeroh
la source