Pour demander que la commande soit imprimée plutôt qu'exécutée après la substitution de l'historique, ajoutez le :p
modificateur , par exemple !42:p
. La commande résultante sera également entrée dans l'historique, vous pourrez donc appuyer sur Uppour la modifier.
Si vous avez l' histverify
option set ( shopt -s histverify
), vous aurez toujours la possibilité de modifier le résultat des substitutions d'historique.
La fonction fc
intégrée donne un accès limité à l’extension de l’historique (aucun indicateur de mot) et vous permet de modifier une commande précédente dans un éditeur externe.
Vous pouvez utiliser !prefix
référence à la dernière commande commençant par prefix
et !?substring
à la dernière commande commençant par substring
. Lorsque vous savez ce que vous recherchez, cela peut vous faire gagner beaucoup de temps history | less
.
La recherche incrémentielle est un autre moyen de rechercher dans l'historique précédent: appuyez sur Ctrl+ Ret commencez à entrer une sous-chaîne de ce que vous recherchez. Appuyez sur Ctrl+ Rpour revenir à l’occurrence précédente de la chaîne de recherche et sur Ctrl+ Ssi vous êtes allé trop loin. La plupart des touches autres que Ctrl+ R, Ctrl+ S, Backspaceet les caractères ordinaires fin à la recherche incrémentale et ont leur effet habituel (par exemple les touches fléchées pour déplacer le curseur dans la ligne que vous avez atteint, Enterpour exécuter la commande).
Gilles, arrête de faire le mal
la source
stty -ixon
avant que Ctrl-s ne fonctionne.Ctrl-s
est important, sinon on reste bloqué comme moi .Un autre petit: Alt+#
commente la ligne en cours et la déplace dans la mémoire tampon de l'historique.
Ainsi, lorsque vous assemblez une ligne de commande et que vous devez émettre une commande provisoire pour trouver un fichier, par exemple, il vous suffit d'appuyer sur Alt+ #, d'émettre l'autre commande, de remonter dans l'historique, de supprimer le commentaire et de continuer.
la source
Esc
,#
fonctionneVous pouvez utiliser l’espace magique pour développer l’histoire avant de taper enter. Dans votre .inputrc, mappez l’espace vers l’espace magique:
Désormais, chaque fois que vous tapez un espace après une spécification d'historique, celui-ci sera immédiatement développé, ce qui est pratique si vous souhaitez également le modifier!
la source
Examinez la
history-expand-line
commande, liée àAlt+^
par défaut. Cela élargira la ligne sur place que vous pourrez ensuite éditer.la source
En utilisant
Ctrl+r
vous pouvez rechercher l'historique:Toute commande trouvée peut être modifiée ...
Je pense que j'ai trouvé exactement ce dont vous avez besoin: exécuter
shopt -s histverify
et la prochaine fois que vous souhaitez utiliser la!n
commande ne sera pas exécutée mais seulement mise en ligne de commande ...la source
!n:p
fonctionnera pas ?J'ai souvent voulu cela. Quand j'ai utilisé csh (et tcsh), j'avais un idiome:
!:88*:p
Cet idiome insère "du mot 88 au dernier mot" de la commande précédente au point où vous tapez sur la ligne de commande actuelle, qui est généralement la fin. En csh, ce n'est pas une erreur pour une telle expression de ne produire aucun mot. Autrement dit, il n'est pas nécessaire que le mot 88 soit suivi d'un mot. S'il n'y a pas de mot 88, cela n'ajoute aucun mot à la fin de la commande en cours de saisie, puis insère la ligne de commande résultante dans l'historique sans exécution.
Comme vous le savez probablement,
*! (comme !! et! -1) est la commande précédente;
*: 88 est le mot 88 (le premier mot - généralement la commande - vaut zéro) et csh exigerait qu'un tel mot existe, mais ...
*: 88 * correspond à tous les mots commençant au mot 88, puis csh n'exige pas que la parole existe;
*: p signifie imprimer, mais n'exécute pas la ligne de commande.
Avec ou sans: p, la ligne de commande est ajoutée à l'historique des commandes.
"Pourquoi 88?" vous vous demandez? Parce que c'est la même clé que le * dont j'ai besoin. Si vous avez des commandes aussi longues, peut-être!: 888 *: p est ce dont vous avez besoin. Désolé, cela ne fonctionne pas avec bash autant que je sache. Bash dira simplement
bash: :88*: bad word specifier
Fait amusant: votre commande n'a généralement pas besoin d'être la première.
> /tmp/foo echo My command is word 3
est valide dans bash et csh.
la source
J'utilise normalement Ctrl+ rpour rechercher, puis Ctrl+ epour aller à la fin de la ligne sans exécuter.
la source