Je me trouve souvent dans la position suivante: j'ai commencé à taper une longue commande à l'invite bash, mais au milieu, je découvre que je dois vérifier quelque chose avec une autre commande. C'est un problème lorsque je suis à la console (pas de X), ce qui est souvent le cas, car je n'ai alors que les moyens insatisfaisants pour le faire, que je connais:
- Appuyez sur ctrl+ alt+ F2et connectez-vous à une autre console virtuelle et découvrez ce que je voulais, puis revenez en arrière et continuez
- ctrl+ a, tapez echo + space+ enter, découvrez ce que je voulais, appuyez ↑jusqu'à ce que je trouve ma commande, ctrl+ a, delx 5, ctrl+ eet continuez
- Mettez en surbrillance ce que j'ai tapé jusqu'à présent avec ma souris (si gpm est en cours d'exécution, ce qui est généralement le cas), appuyez sur ctrl+ cpour l'interrompre, découvrez ce que je voulais en faisant attention de ne pas utiliser ma souris pour mettre en évidence des éléments, puis appuyez sur le bouton central de la souris. sur une nouvelle invite et continuez
- Priez les dieux de la ligne de commande pour que la commande à moitié écrite n'ait pas d'effet négatif, mais simplement échoue, et appuyez avec précaution sur entrée, puis découvrez ce que je voulais, appuyez sur la touche de haut en bas jusqu'à ce que je récupère ma commande, puis continuez.
- Aller dans ma machine à voyager dans le temps, remonter dans le temps et me rappeler de démarrer écran avant de commencer à taper une commande, revenir au présent, appuyer sur ctrl+ a c, trouver ce que je voulais, appuyer sur ctrl+ a ctrl+aet continuer
Ce que je veux savoir, c'est s'il existe un moyen plus élégant de le faire. Une sorte de commande de sous-coque ou similaire?
Je suis surtout intéressé par les méthodes qui ne nécessitent aucune préparation ou configuration pour fonctionner.
la source
zsh
elle coupe toute la ligne, mais surbash
elle coupe en arrière. Je n'avais jamais remarqué cette différence auparavant^U
^K
aura le même effet que^A
^K
mais est légèrement plus ergonomique et nettement plus pratique sousscreen
.Faites ctrl-A pour vous rendre au début de la ligne, ajoutez un hachage et appuyez sur la touche Entrée - de cette manière, il restera dans l’historique des commandes sous forme de commentaire et vous pourrez y revenir avec le curseur haut.
EDIT: je viens de remarquer que cette variante est un peu plus élégante sur votre # 2;)
la source
csh
ouzsh
parce qu'ils n'autorisent pas les commentaires dans le shell interactif. Enzsh
vous devez activer l'option appropriée:setopt interactive_comments
.:
devrait être considéré comme nocif à cette fin et ne jamais être suggéré. Il exécutera tout après un point-virgule, des backticks internes, etc. avec tous les effets secondaires associés.Hit
Ctrl+A
,Ctrl+K
pour aller au début de la ligne et supprimer (kill) jusqu'à la fin. Ensuite, faites votre recherche et, lorsque vousCtrl+Y
êtes prêt à continuer, appuyez sur le bouton pour remettre votre ligne sauvegardée.la source
En zsh, je tape Ctrl+ Zpour «suspendre» la commande que je tape et saisis une autre commande. Après avoir exécuté cette commande (ou l'avoir annulée avec Ctrl+ C), la commande suspendue revient pour édition (même en se rappelant la position du curseur). Pour plus de commodité, si la ligne de commande est vide lorsque je tape Ctrl+ Z, la touche appelle la fonction
bg
intégrée (un double Ctrl+ Zenvoie donc une commande en cours d'exécution directement à l'arrière-plan).Je ne sais pas comment faire quelque chose de similaire à Bash.
Dans n'importe quel shell, vous pouvez utiliser la méthode peu technique consistant à ajouter un
#
au début de la ligne en cours .la source
zsh
existe déjà une fonction intégrée ? Cela s'appellepush-line
et tout ce que vous avez à faire est d'utiliserbindkey
pour y arriver.push-input
plutôtpush-line
qu'ici,push-line
semble-t-il plus approprié (peut-être que les anciennes versions de zsh ne l'étaientpush-input
?). Mais ce n'est pas un remplacement pour le reste de la fonction.push-line
ne sert à rien sur une ligne vide, ayantbg
surCtrl+Z
seulement est utile quand je viens avec ce processus suspenduCtrl+Z
) et mnémoniques (je suis soit le processus semi- finition ou la ligne de commande partielle).push-input
suspend tout le tampon d'entrée, alors quepush-line
ne suspend que la ligne en cours. Si je tape une commande multiligne, je veux suspendre toute la commande, doncpush-input
c'est la bonne. Je trouvepush-input
plus souvent utile quepush-line
(si je veux retarder une ligne dans une mémoire tampon multiligne, je peux simplement naviguer jusqu'au début de la ligne et insérer une nouvelle ligne), je me demande donc pourquoipush-line
la liaison par défaut a été obtenuepush-input
.En bash, tapez simplement Alt+ #.
Ensuite, lorsque vous êtes prêt, appuyez sur Uppuis sur Alt+ #.
Le premier met un
#
en début de ligne pour le transformer en commentaire, puis accepte la ligne, comme si vous aviez appuyé Enter.Ensuite, lorsque vous le faites une seconde fois, il voit que la ligne a déjà un a
#
au début, donc il la supprime et l’accepte, en vous sauvant à nouveau la Enterclé.Si la deuxième fois insère simplement une autre
#
, vous devez taper Alt+ - Alt+ à la #place.Vous pouvez faire de même avec zsh en mettant
dans votre ~ / .zshrc.
Ou, si vous utilisez des liaisons vi, vous pouvez taper à #partir du mode commande à la fois en bash et en zsh.
la source
Esc+1
puisAlt
+#
pour basculer.Une de mes fonctionnalités préférées
zsh
est la fonction de ligne de commande intégrée qui s’occupe de cela sans le moindre piratage dans les autres réponses données ici. Je l'ai lié à Ctrl+ ldans mon.zshrc
fichier comme ceci:Ensuite, lorsque je tape quelque commande et que je dois faire autre chose très rapidement, je peux l'invoquer avec une seule touche et obtenir une invite vide. Après avoir exécuté l'autre commande, l'invite est automatiquement renseignée avec ce que je tapais auparavant.
Vous pouvez même enchaîner plusieurs couches et les commandes vous reviendront dans l'ordre inverse de leur insertion dans la file d'attente.
la source
Ctrl+Q
etESC q
par défaut (en mode emacs).push-line-or-edit
widget, qui n'est lié à aucun keymap par défaut. À l'invite de niveau supérieur, il fait la même chose quepush-line
, mais à n'importe quel niveau d'invite, il convertit la commande entière entrée en un tampon multi-lignes. Deux fonctions géniales sur une seule touche! Je peux recommander la liaisonpush-line-or-edit
au lieu de plainepush-line
. Vous ne perdez rien et gagnez des fonctionnalités utiles.En plus du ctrl- a ctrl- ktruc, si vous êtes à l' écran, juste ctrl- a dà détacher puis rattachez avec
screen -r
Vous pouvez aussi simplement ouvrir une autre fenêtre avec ctrl+a c
la source
Ctrl+A c
.Une autre manière, pas parfaite cependant, presse
Ctrl-X
Ctrl-E
. Ceci ouvrira votre éditeur par défaut contenant votre commande à moitié tapée. Ensuite, vous pouvez enregistrer votre commande dans un fichier ou ouvrir un nouveau shell à partir de votre éditeur. Lorsque vous quittez le nouveau shell, vous revenez à l'éditeur et l'enregistrement du contenu les exécute automatiquement.Ce n'est pas parfait car il ne vous renvoie pas à votre shell d'origine, mais force l'exécution de la commande ou la supprime complètement. Mais il n'y a pas de sélections temporaires ou de tampons de neutralisation à craindre, et il y a aussi quelques réglages intéressants, par exemple if editor = vi
la source
sudo update-alternatives --config editor
et choisissez votre éditeur préféré. Pour les autres systèmes, définissez les variables d'environnement EDITOR ou VISUAL sur votre éditeur favori, par exemple, ajoutezexport EDITOR=/usr/bin/nano
votre .bashrc.Semblable à la méthode d’ajout
#
en début de ligne, il existe une méthode plus simple que j’utilise qui n’exige pas de revenir au début de la ligne:Ajoutez simplement un devis ouvert et ne le fermez pas, qu'il soit simple ou double.
Puis appuyez sur Enter.
Puis appuyez sur CtrlC.
La commande partielle est enregistrée dans l'historique des commandes (disponible via la flèche vers le haut) mais n'est pas réellement exécutée.
la source
Avec zsh, si vous tapez
<ESC> q
(échappe, puis Q), votre ligne d’invite sera coupée afin que vous puissiez taper une autre commande. Vous obtiendrez automatiquement votre texte coupé à la prochaine invite.Il peut se rappeler plusieurs lignes en même temps, vous pouvez donc l'utiliser pendant qu'une ligne vous attend. Vous pouvez même l'utiliser sur une ligne vierge pour retarder la reprise de votre ligne de coupe.
Ce n'est pas le moyen le plus efficace si vous devez utiliser plusieurs commandes pour la vérification / préparation (vous devrez retaper
<ESC> q
avant chaque commande). Mais je pense qu'il est possible de le lier à un raccourci plus court.Si vous voulez juste vérifier le manuel, tapez
<ESC> h
(échappement, puis H). Cela va exécuter lerun-help
prédéfini, avec le premier mot de la ligne de commande comme argument. Vous retrouverez votre ligne intacte une fois terminé.la source
M-q
au lieu de<ESC> q