2009-03-04 33 views
227

Ich versuche, ein Zeichen zu ersetzen - sagen ; - mit einer neuen Zeile mit replace-string und/oder replace-regexp in Emacs.Wie ersetze ich einen Buchstaben in Emacs durch einen Zeilenumbruch?

Ich habe die folgenden Befehle versucht:

  • M-xreplace-stringRET;RET\n

    Diese ; mit 2 Zeichen ersetzen: \n.

  • M-xreplace-regexRET;RET\n

    Dies führt zu dem folgenden Fehler (in den Minipuffern gezeigt):

    Ungültige Verwendung von `\ in Ersetzungstext‘.

Was ist los mit der Verwendung von replace-string für diese Aufgabe? Gibt es einen anderen Weg, es zu tun?

Danke.

Antwort

340

M-xreplace-stringRET RET;C-Q-C-j.

  • C-q für quoted-insert,

  • C-j ist eine Neue-Zeile.

Prost!

+1

C-q ist wirklich 'quote-insert', die das nächste Zeichen zitiert. –

+2

Ich glaube, es ist tatsächlich "zitiert" statt "Zitat", wie in "zitiert-einfügen". So ist es zumindest in Version 22.1. –

+4

Warum funktioniert 'Ret' nicht anstelle von' C-j' nach dem 'C-q'? – Cactus

22

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

Sie können also einfach ein Newline-Zeichen (oder eine beliebige Zeichenfolge) aus Ihrem Puffer kopieren und dann bei Aufforderung zum Ersetzungstext ziehen.

+2

Es ist wirklich eine gute Idee für die Zeichen, die ich den Schlüssel nicht kenne . – Lei

7

Deutlicher ausgedrückt:

das Semikolon Zeichen ersetzen (;) mit einem Newline, gehen Sie wie folgt genauen Schritte.

  1. Cursor links oben Puffer lokalisieren Text enthält, die Sie
  2. Typ mx ersetzen-String und drücken RETURN
  3. der Mini-Puffer wird in etwa so angezeigt ändern möchten: Zeichenfolge ersetzen (Standard^- >):
  4. Geben Sie das Zeichen ein, das Sie ersetzen möchten. In diesem Fall, ; und drücken Sie RETURN
  5. der Mini-Puffer wird etwa Folgendes anzeigen: string; mit:
  6. Jetzt Cq Cj
  7. Alle Instanzen von Semikolon wird eine neue Zeile ersetzt werden (von der Cursorposition bis zum Ende des Puffers erscheint jetzt) ​​

Bit mehr zu bieten als die execute ursprüngliche Erklärung sagt.

2

Wechseln Sie in den Text-Modus

M-x text-mode 

Highlight Block

einrücken

C+M \ 

Wechseln Sie wieder zu, was Modus ..

52

Es gibt vier Möglichkeiten einrücken Ich habe gefunden, um eine neue Zeile in den Minipuffer zu legen.

  1. Co

  2. Cq Cj

  3. Cq12 (12 ist der Oktalwert Neue-Zeile)

  4. Cx o zum Hauptfenster , töte ein Newline mit C-k, dann C-x o zurück zum Minipuffer, zerrt sie mit C-y

+6

+1 für die Erwähnung von 'C-o'!Ein Schlag weniger im Vergleich zu 'C-q C-j'. Hatte nicht daran gedacht, das vorher zu benutzen. – itsjeyd

+0

Danke für Version 4! Hilfreich, wenn Sie C-o und C-q Rebound haben. –

+0

Vielen Dank. Können Sie erklären, warum C-o funktioniert und C-q C-j nicht? –

Verwandte Themen