Comment remplacer un personnage par une nouvelle ligne dans Emacs?

285

J'essaie de remplacer un caractère - disons ;- par une nouvelle ligne utilisant replace-stringet / ou replace-regexpdans Emacs.

J'ai essayé les commandes suivantes:

  • M-x replace-string RET ; RET \n

    Cela remplacera ;avec 2 caractères: \n.

  • M-x replace-regex RET ; RET \n

    Cela se traduit par l'erreur suivante (affichée dans le mini-tampon):

    Utilisation non valide de «\» dans le texte de remplacement.

Quel est le problème avec l'utilisation replace-stringde cette tâche? Y a-t-il une autre façon de procéder?

Merci.

Lei
la source

Réponses:

427

M-x replace-string RET ; RET C-q C-j.

  • C-qpour quoted-insert,

  • C-j est une nouvelle ligne.

À votre santé!

Jonathan Arkell
la source
3
Cq est vraiment celui quote-insertqui cite le caractère suivant.
Joe Casadonte
2
Je crois que c'est en fait "cité" plutôt que "citation", comme dans "quoted-insert". C'est du moins le cas pour la version 22.1.
Bryan Oakley
8
C-jest un 0x0acode de contrôle littéral , contre Retlequel est la clé à côté de votre devis et envoie 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell
2
Remarque pour les utilisateurs de vim, utilisant C-jdans emacs , tandis que C-mdans vim .
Alpha TAN
2
@JonathanArkell C'est une description de la façon dont cela fonctionne, mais pas pourquoi . Dans l'éditeur, Ret produit 0x0a, alors pourquoi devrait-il produire 0x0d en guillemets? Cela n'a aucun sens. (Tout simplement parce que le code du clavier interne est 0x0d pour des raisons historiques? Nous utilisons des cartes de touches partout, pourquoi pas ici où cela est parfaitement logique?)
vog
74

J'ai trouvé quatre façons de mettre une nouvelle ligne dans le mini-tampon.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 est la valeur octale de la nouvelle ligne)

  4. C-x oà la fenêtre principale, tuez une nouvelle ligne avec C-k, puis C-x orevenez au mini-tampon, tirez dessus avecC-y

slipmthgoose
la source
10
+1 pour mentionner C-o! Un coup de touche de moins par rapport à C-q C-j. Je n'avais pas pensé à utiliser celui-là auparavant.
itsjeyd
Merci pour la version 4! Utile si vous avez un rebond Co et Cq.
Joachim W
Merci beaucoup. Pouvez-vous expliquer pourquoi Co fonctionne et Cq Cj ne fonctionne pas?
Christian Madsen
C-one déplace pas le point après avoir inséré la nouvelle ligne dans le mini-tampon, vous devez donc toujours appuyer sur la touche fléchée droite également si vous souhaitez insérer quelque chose après la nouvelle ligne dans la chaîne de remplacement.
Robin Green
Sur ma version d'Emacs 25.2.2, C-oentrera une nouvelle ligne dans la fenêtre principale lors de l'utilisation de la recherche, tandis que C-q C-jentrera la nouvelle ligne dans le mini-tampon. C-ofonctionne avec la requête - remplacez cependant.
TC Proctor
25

N'oubliez pas que vous pouvez toujours couper et coller dans le mini-tampon.

Vous pouvez donc simplement copier un caractère de nouvelle ligne (ou n'importe quelle chaîne) de votre tampon, puis le retirer lorsque vous êtes invité à entrer le texte de remplacement.


la source
2
C'est vraiment une bonne idée pour les personnages dont je ne connais pas le raccourci clavier.
Lei
Ah ah ! si simple !
Jérémy Pouyet
8

Plus explicitement:

Pour remplacer le caractère point-virgule (;) par une nouvelle ligne, procédez comme suit.

  1. localiser le curseur en haut à gauche du tampon contenant le texte que vous souhaitez modifier
  2. Tapez mx replace-string et appuyez sur RETOUR
  3. le mini-tampon affichera quelque chose comme ceci: Remplacez la chaîne (par défaut ^ ->):
  4. Tapez le caractère que vous souhaitez remplacer. Dans ce cas, ; et appuyez sur RETOUR
  5. le mini-tampon affichera quelque chose comme ceci: string; avec:
  6. Maintenant, exécutez Cq Cj
  7. Toutes les instances de point-virgule seront remplacées par un retour à la ligne (de l'emplacement du curseur à la fin du tampon apparaîtra maintenant)

Un peu plus que l'explication originale ne le dit.

afc
la source
2

Passer en mode texte

M-x text-mode

Mettre le bloc en surbrillance en retrait

Retrait

C+M \

Revenez à n'importe quel mode ..

enkdr
la source
0

en ligne juste: C-M-S-%(si les clés de liaison sont toujours par défaut) que replace-string^J

Aiad Faris
la source