Question

Existe-t-il un moyen d'exécuter un remplacement de chaîne d'expression rationnelle sur la ligne actuelle dans le bash ?

Je me retrouve assez souvent dans la situation où j'ai tapé une longue ligne de commande et réalise ensuite que j'aimerais changer un mot quelque part dans la ligne.

Mon approche actuelle consiste à terminer la ligne, appuyez sur Ctrl+UN (pour arriver au début de la ligne), insérez un # (pour commenter la ligne), appuyez sur Entrée puis utilisez le ^oldword^newword syntaxe (^oldword^newword exécute la commande précédente après avoir remplacé oldword par newword).

Mais il doit exister un meilleur moyen (plus rapide) d’y parvenir.(La souris n'est pas possible, puisque je suis la plupart du temps en session ssh).

Il existe probablement un raccourci clavier de type Emacs pour cela, que je ne connais pas.

Modifier:J'ai essayé d'utiliser le mode vi.Quelque chose d’étrange s’est produit.Bien que je sois un utilisateur aimant de Vim, j'ai eu de sérieuses difficultés à utiliser mon bash bien-aimé.Tous ces mouvements de doigts, qui ont été gravés dans mon subconscient, ont soudainement cessé de fonctionner.Je suis rapidement revenu en mode emacs et j'ai réfléchi, en essayant Emacs comme mon éditeur préféré (même si je suppose que la même chose pourrait se reproduire).

Était-ce utile?

La solution

Malheureusement non, il n’y a pas vraiment de meilleure solution.Si vous en avez juste marre de faire des frappes au clavier, vous pouvez utiliser des macros pour les réduire.Ajoutez ce qui suit à votre ~/.inputrc:

"\C-x6": "\C-a#\C-m^"
"\C-x7": "\C-m\C-P\C-a\C-d\C-m"

Maintenant, dans une nouvelle instance bash (ou après rechargement .inputrc dans votre shell actuel en appuyant sur C-x C-r), vous pouvez effectuer les opérations suivantes :

  1. Tapez une fausse commande (par exemple, ls abcxyz).
  2. Appuyez sur Ctrl-x, puis sur 6.La macro insère un # au début de la ligne, exécute la ligne commentée et tape votre premier ^.
  3. Tapez votre correction (par exemple, xyz^def).
  4. Appuyez sur Ctrl-x, puis sur 7.La macro termine votre substitution, puis remonte à la ligne précédente (commentée), supprime le caractère de commentaire et l'exécute à nouveau.

Ce n'est pas vraiment élégant, mais je pense que c'est le meilleur que vous obtiendrez avec readline.

Autres conseils

en ksh, en mode vi, si vous appuyez sur « v » en mode commande, une session vi complète sera générée sur le contenu de votre ligne de commande actuelle.Vous pouvez ensuite éditer en utilisant la gamme complète de commandes vi (recherche et remplacement global dans votre cas).Lorsque :wq depuis vi, la commande éditée est exécutée.Je suis sûr que quelque chose de similaire existe pour bash.Puisque bash a tendance à étendre ses prédécesseurs, il existe probablement quelque chose de similaire.

Bonjour,

Et si vous utilisiez plutôt le mode vi ?Entrez simplement set -o vi

Ensuite, vous pouvez accéder au mot que vous souhaitez modifier et simplement faire un cw ou un cW en fonction de ce qu'il y a dans le mot ?

Oups, j'ai oublié d'ajouter un ESC k à o à la ligne précédente de l'historique des commandes.

Qu'utilisez-vous habituellement comme éditeur ?

Bravo, Rob

Modifier:Ce que j'ai oublié de dire dans ma réponse originale, c'est que vous devez penser à la ligne de commande vi dans bash en utilisant les commandes que vous entrez lorsque vous êtes en mode "ex" dans vi, c'est-à-direaprès avoir entré le côlon.

Le pire est que vous devez vous déplacer dans l'historique de vos commandes en utilisant les anciennes commandes vi de h (à gauche) et l (à droite).Vous pouvez cependant utiliser w (ou W) pour rebondir sur les mots.

Une fois que vous vous y êtes habitué, vous disposez de toutes sortes de commandes, par ex.en entrant ESC / my_command, vous parcourrez votre historique, le plus récent en premier, pour trouver la première occurrence de la ligne de commande contenant le texte my_command.Une fois qu'il a trouvé cela, vous pouvez alors utiliser n pour trouver l'occurrence suivante, etc.Et N pour inverser le sens de la recherche.

J'irais lire la page de manuel de bash pour voir ce qui est disponible en mode vi.Une fois que vous aurez surmonté le fait que les flèches vers le haut et vers le bas sont remplacées par ESC k, puis j, vous verrez que le mode vi offre plus que le mode emacs pour l'édition en ligne de commande dans bash.

À mon humble avis, naturellement !(- :

Emacs ?Quatre-vingts Mo et échange constant !

Bravo, Rob

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top