Comment ajouter un préfixe à chaque ligne?

35

J'ai le code ci-dessous:

Hello
There
I am some code

Et voulez ajouter du code devant, comme:

I said Hello
I said There
I said I am some code

Alors, comment pourrais-je ajouter un préfixe à chaque ligne?

Luke
la source

Réponses:

47

Vous pouvez ajouter un préfixe avec M-x string-rectangle, qui est lié à C-x r t. Cela fait partie d'une série de commandes qui opèrent sur des sélections rectangulaires ; celui-ci insère du texte à chaque ligne du rectangle.

Commencez par définir la marque au début de la première ligne, puis déplacez le curseur sur le premier caractère de la dernière ligne à préfixer:

*Hello
 There
▮I am some code

Puis utilisez C-x r t, entrez votre préfixe ( I said) et appuyez sur RET. Cela ajoute le texte à chaque ligne du rectangle:

I said Hello
I said There
I said I am some code

Si vous n'alignez pas votre curseur sur la même colonne que votre marque, cela écrasera cette partie du rectangle:

*Hello
 There
 I am▮ some code

avec la même commande, on obtient:

I said o
I said e
I said  some code
Tikhon Jelvis
la source
3
vous êtes la deuxième personne à gagner un badge de bonne réponse :)
nicael
Une alternative est d'utiliser M-x string-insert-rectangle. C'est très similaire, mais string-insert-rectangle insère au début de chaque ligne de la sélection, alors que string-rectangle remplace , donc avec cette dernière vous devez être plus précis sur votre sélection si vous ne voulez rien écraser.
Jeff Clites
32

Vous pouvez utiliser le mode multiple-cursors , pour placer un curseur sur chaque ligne. Ensuite, le texte que vous tapez sera inséré sur chaque ligne.

Vous commenceriez avec le point au début du morceau de code:

▮Hello
 There
 I am some code

Puis frappez C->deux fois. (Ceci est la liaison de clé suggérée; vous devez la configurer vous-même.) Cela crée deux curseurs supplémentaires sur les deux lignes suivantes:

▮Hello
▮There
▮I am some code

Puis tapez I said. Le texte sera ajouté sur chaque ligne:

I said ▮Hello
I said ▮There
I said ▮I am some code

Enfin, appuyez sur RETpour quitter le mode de curseurs multiples et laisser le point sur le dernier curseur:

I said Hello
I said There
I said ▮I am some code

Voici une vidéo qui montre comment cela fonctionne.

legoscia
la source
26

Personnellement, je préfère replace-regexp(remplacer "^" par "j'ai dit").

artagnon
la source
12

Une autre option consiste à utiliser des macros, qui peuvent traiter plus de tâches que les sélections rectangulaires ou les curseurs multiples, même si c'est un peu plus encombrant dans ce cas particulier.

Placez le curseur au début de la première ligne et appuyez F3pour démarrer l'enregistrement, insérez le texte, déplacez le curseur au début de la ligne suivante et appuyez F4pour arrêter l'enregistrement. Appuyez de F4nouveau sur pour répéter la macro, la C-2 F4répéter deux fois ou C-0 F4jusqu'à ce qu'une erreur se produise (telle qu'une épuisement des lignes).

santé mentale
la source
9

Vous pouvez installer evil et le faire de nombreuses manières similaires à vi - je préfère la sélection visuelle de blocs en utilisant Ctrl+ Vpour marquer chaque ligne, puis Shift+ Ipour insérer, puis tapez le texte que vous souhaitez insérer et, enfin, appuyez sur ESCpour quitter le mode insertion et le menu contextuel. le texte sera ajouté à chaque ligne. Ceci est très similaire aux sélections de rectangle emacs mais quelques touches de moins.

alexmurray
la source
7

Ceci est très similaire à la réponse d’artagnon, mais replace-regexpn’est lié à aucune clé.

Donc, j’utilise réellement query-replace-regexpce qui est lié par défaut à C-M-%et puis le remplace ^par le préfixe indiqué I said, puis je tape !pour tout remplacer sans plus de demande.

b4hand
la source
4

Si vous avez cua-modeactivé, alors:

  • C-a aller au début de la ligne,
  • C-RET pour commencer un rectangle,
  • (touche bas) deux fois pour passer à la troisième ligne,
  • I said comme texte à insérer
  • C-RET terminer le rectangle

Je préfère la cua-modefaçon de travailler par rapport au rectangle standard Emacs où l'équivalent serait:

  • C-a aller au début de la ligne,
  • C-SPC pour commencer un rectangle,
  • (touche bas) deux fois pour passer à la troisième ligne,
  • C-x r t I said RET insérer du texte

Les cua-modearrêts deux touches par rapport à la norme rectangle Emacs.

Mais pour moi, l’avantage supplémentaire du mode cua est que je peux ajouter du texte au rectangle (personnellement, je ne sais pas comment ajouter du texte avec un rectangle Emacs standard). En mode Cua, il RETsuffit d'appuyer sur une touche, saisie avant le I said.

thdox
la source