Fractionner une ligne de commande d'invite existante en quelques lignes

8

Je comprends que je peux taper \ enterà la fin d'une bashligne de commande pour continuer cette commande sur une autre ligne. Mais comment puis-je diviser une ligne de commande d' invite - qui a déjà été entièrement tapée - en deux?

Par exemple, comment puis-je casser cette ligne juste avant thensans avoir à couper le reste et à le taper à nouveau?

$ if true; then ls; fi
nr
la source
1
Si vous êtes à une invite de ligne de commande interactive, y a-t-il une raison particulière pour laquelle vous devez faire cela en plus de rendre votre historique de shell plus joli? Fonctionnellement, les nouvelles lignes supplémentaires ne font aucune différence pour le shell. Si vous tapez un long extrait de shell complexe, il est préférable d'utiliser un éditeur. Examinez également la fccommande - elle est disponible dans presque tous les shells.
jw013
Pas plus joli mais juste pour rendre les commandes complexes lisibles.
nr

Réponses:

4

Un caractère de nouvelle ligne est LF (line feed), alias Control-J. Si vous appuyez sur Ctrl+ J, cela exécute la commande accept-line, comme la Returntouche. Pour insérer un caractère LF littéral, appuyez sur Ctrl+ V Ctrl+ J. La commande Ctrl+ V( quoted-insert) insère littéralement le caractère suivant. Ainsi, pour diviser une ligne, vous pouvez entrer \ Ctrl+ V.

Si vous le faites souvent, vous pouvez en faire une macro:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'
Gilles 'SO- arrête d'être méchant'
la source
6

Vous pouvez utiliser edit-and-execute-command, généralement mappé à Ctrl+ x+ e, pour ouvrir la commande actuelle dans un éditeur . En quittant l'éditeur, la commande sera exécutée.

l0b0
la source
1
Nice - n'a jamais su cela. Vous devez vous assurer que votre variable $ environnement EDITOR est réglé sur quelque chose - j'ai ajouté vimà la mienne comme ceci: export EDITOR=vim.
slm
1
Comment annuler l'exécution de la commande à la sortie de l'éditeur? J'utilise :q!ou ZQmais en vain.
Birei
1
@Birei: Supprimez toutes les lignes puis enregistrez et quittez (par exemple ggdG:wqou :%d|wq, etc.). La commande restera dans l'historique (peut-être en double si vous l'avez rappelée d'une entrée précédente), mais elle ne sera pas exécutée.
pause jusqu'à nouvel ordre.
@DennisWilliamson: Wow !! Près de trois ans plus tard, je n'avais pas encore résolu ce problème, merci beaucoup car la solution était si simple et la simplicité est toujours meilleure.
Birei
2

Remarque - cette réponse spécifique à vi et vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Pour modifier la ligne tapée actuelle, appuyez sur ESC(pour entrer en mode de commande viou vim), puis tapez vou vi.

Notez que toutes les commandes d'édition de vi / vim fonctionnent. par exemple

  • ESC+ A met à la fin de la ligne tapée actuelle.
  • ESC+ 0 place le curseur au début de la ligne.
suspect
la source
Excellent. Cela facilite certainement l'édition des lignes de commande. Mais savez-vous comment insérer un nouveau caractère de ligne sans passer en mode visuel?
n °
2
Merci. CTRL+ vpuis CTRL+ jpour lancer une nouvelle ligne devrait fonctionner.
suspectus