Configurer la flèche vers le haut pour parcourir les commandes avec les mêmes caractères initiaux plutôt que toutes les commandes précédentes

15

Sur la bashligne de commande, me donne la commande précédente. Sur les lignes de commande dans numpyou matlab, lorsque je tape quelques caractères, me donne la commande entrée précédemment en commençant par ces caractères . Comment puis-je activer exactement ce comportement dans bash?

Je connais des méthodes plus avancées de recherche dans l'historique de la ligne de commande, mais parfois une méthode simple est plus pratique.

gerrit
la source

Réponses:

18

Les commandes readline que vous recherchez sont les history-search-*commandes:

history-search-forward
Recherche en avant dans l'historique la chaîne de caractères entre le début de la ligne actuelle et la position actuelle du curseur (le point). Il s'agit d'une recherche non incrémentielle.
history-search-backward
Recherche en arrière dans l'historique pour la chaîne de caractères entre le début de la ligne actuelle et le point. Il s'agit d'une recherche non incrémentielle.

Les lier dans votre .inputrc, comme ceci:

"\e[A": history-search-backward            # arrow up
"\e[B": history-search-forward             # arrow down

vous permettra d'entrer les premiers caractères d'une commande, puis d'utiliser les touches Upet Downpour parcourir uniquement les commandes de votre .bash_historyqui commencent par cette chaîne.

Par exemple, la saisie de viet Upvous amènerait à la première commande précédente commençant par vi, comme vim somefile. La saisie vous Upamènerait à l'instance précédente suivante, et ainsi de suite.

Vous pouvez en savoir plus sur toutes les liaisons de ligne de lecture ici: http://linux.about.com/library/cmd/blcmdl3_readline.htm

jasonwryan
la source
10

Ajoutez ce qui suit à votre .inputrc dans ~ /, pour faire ce que vous avez suggéré:

"\e[B": history-search-forward
"\e[A": history-search-backward

Vous voudrez peut-être également ajouter ce qui suit à votre .bash_profile:

export INPUTRC=~/.inputrc
johankj
la source
Pouvez-vous expliquer pourquoi faire cette "exportation"?
texnic
2

Ajoutez un "!" à la commande que vous recherchez. Si vous souhaitez remplacer la fonctionnalité des flèches haut et bas, la modification du fichier inputrc (comme le suggèrent les autres réponses) est la solution.

Si "commande" est la commande que vous recherchez, entrez ceci:

!comm

Vous devriez obtenir "commande" en sortie.

De même, si vous souhaitez rechercher une commande qui inclut (mais ne démarre pas) une partie de la commande, appuyez sur ctrl + r, puis tapez une partie de la commande.

Vous pouvez également taper "onglet" pour compléter automatiquement votre texte saisi (cela inclut également les fichiers). Ceci est utile si vous recherchez une commande qui n'est pas dans votre historique (ou si vous n'avez pas de fichier historique)

Vous pouvez en savoir plus sur la "maîtrise" du fichier d'historique ici: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/

Il s'agit d'un doublon possible de /programming/1030182/how-do-i-change-bash-history-completion-to-complete-whats-already-on-the-line

Réalité
la source
Les autres réponses répondent plus correctement à ma question, mais merci pour le pointeur sur SO (voir aussi meta.stackexchange.com/q/4708/172266 ).
gerrit