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

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

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'

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.


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.