Wie ersetze ich einen Charakter in Emacs durch eine neue Zeile?


285

Ich versuche, ein Zeichen - sagen wir ;- durch eine neue Zeile mit replace-stringund / oder replace-regexpin Emacs zu ersetzen .

Ich habe die folgenden Befehle ausprobiert:

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

    Dies wird durch ;2 Zeichen ersetzt : \n.

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

    Dies führt zu folgendem Fehler (im Minibuffer angezeigt):

    Ungültige Verwendung von "\" im Ersatztext.

Was ist falsch daran, replace-stringdiese Aufgabe zu verwenden? Gibt es eine andere Möglichkeit, dies zu tun?

Vielen Dank.

Antworten:


427

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

  • C-qfür quoted-insert,

  • C-j ist eine neue Zeile.

Prost!


3
Cq ist wirklich das, quote-insertwas das nächste Zeichen zitiert.
Joe Casadonte

2
Ich glaube, es ist tatsächlich "zitiert" und nicht "zitiert", wie in "zitiert-einfügen". Zumindest ist das in Version 22.1 so.
Bryan Oakley

8
C-jist ein wörtlicher 0x0aSteuercode, gegenüber Retdem der Schlüssel neben Ihrem Angebot steht und gesendet wird 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell

2
Hinweis für vim-Benutzer, die C-jin Emacs und C-min vim verwenden .
Alpha TAN

2
@ JonathanArkell Das ist eine Beschreibung, wie es funktioniert, aber nicht warum . Im Editor erzeugt Ret 0x0a. Warum sollte es also in Anführungszeichen 0x0d erzeugen? Das macht keinen Sinn. (Nur weil der interne Tastaturcode aus historischen Gründen 0x0d ist? Wir verwenden überall Tastenkarten, warum nicht hier, wo es vollkommen sinnvoll ist?)
Vog

74

Ich habe vier Möglichkeiten gefunden, eine neue Zeile in den Minibuffer einzufügen.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 ist der Oktalwert von Newline)

  4. C-x ozum Hauptfenster, töte eine neue Zeile mit C-k, dann C-x ozurück zum Minibuffer, ziehe sie mitC-y


10
+1 für die Erwähnung C-o! Ein Tastendruck weniger im Vergleich zu C-q C-j. Ich hatte vorher nicht daran gedacht, diesen zu benutzen.
itsjeyd

Danke für Version 4! Hilfreich, wenn Sie Co und Cq Rebound haben.
Joachim W

Vielen Dank. Können Sie erklären, warum Co funktioniert und Cq Cj nicht?
Christian Madsen

C-oVerschiebt den Punkt nach dem Einfügen der neuen Zeile in den Minibuffer nicht. Sie müssen daher auch noch die rechte Pfeiltaste drücken, wenn Sie nach der neuen Zeile etwas in die Ersatzzeichenfolge einfügen möchten.
Robin Green

In meiner Version von Emacs 25.2.2 C-owird bei Verwendung der Suche eine neue Zeile im Hauptfenster eingegeben, während C-q C-jdie neue Zeile im Minibuffer eingegeben wird. C-ofunktioniert mit Abfrage - aber ersetzen.
TC Proctor

25

Vergessen Sie nicht, dass Sie immer ausschneiden und in den Minibuffer einfügen können.

Sie können also einfach ein Zeilenumbruchzeichen (oder eine beliebige Zeichenfolge) aus Ihrem Puffer kopieren und dann ziehen, wenn Sie zur Eingabe des Ersatztextes aufgefordert werden.


2
Es ist wirklich eine gute Idee für die Charaktere, deren Schlüsselbindung ich nicht kenne.
Lei

Ah ah ! so einfach !
Jérémy Pouyet

8

Genauer gesagt:

Befolgen Sie genau diese Schritte, um das Semikolonzeichen (;) durch eine neue Zeile zu ersetzen.

  1. Suchen Sie den Cursor oben links im Puffer mit dem Text, den Sie ändern möchten
  2. Geben Sie mx replace-string ein und drücken Sie RETURN
  3. Der Minipuffer zeigt ungefähr Folgendes an: Zeichenfolge ersetzen (Standard ^ ->):
  4. Geben Sie das Zeichen ein, das Sie ersetzen möchten. In diesem Fall, ; und drücken Sie RETURN
  5. Der Minipuffer zeigt ungefähr Folgendes an: string; mit:
  6. Führen Sie nun Cq Cj aus
  7. Alle Instanzen des Semikolons werden durch eine neue Zeile ersetzt (von der Cursorposition bis zum Ende des Puffers wird jetzt angezeigt).

Etwas mehr als die ursprüngliche Erklärung sagt.


2

Wechseln Sie in den Textmodus

M-x text-mode

Markieren Sie den Block zum Einrücken

Einzug

C+M \

Wechseln Sie zurück in einen beliebigen Modus.


0

Inline nur: C-M-S-%(wenn Bindungsschlüssel immer noch Standard sind) als replace-string^J

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.