Wie füge ich jeder Zeile ein Präfix hinzu?

35

Ich habe den folgenden Code:

Hello
There
I am some code

Und möchten Code davor hinzufügen, wie zum Beispiel:

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

Wie würde ich also jeder Zeile ein Präfix hinzufügen?

Luke
quelle

Antworten:

47

Sie können ein Präfix mit hinzufügen M-x string-rectangle, an das gebunden ist C-x r t. Dies ist Teil einer Reihe von Befehlen, die rechteckige Auswahlen verarbeiten . Dieser fügt Text in jede Zeile des Rechtecks ​​ein.

Setzen Sie zunächst die Markierung am Anfang der ersten Zeile und bewegen Sie den Cursor zum ersten Zeichen der letzten Zeile, der Sie ein Präfix hinzufügen möchten:

*Hello
 There
▮I am some code

Verwenden Sie dann C-x r t, geben Sie Ihr Präfix ( I said) ein und drücken Sie RET. Dies fügt den Text zu jeder Zeile im Rechteck hinzu:

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

Wenn Sie den Cursor nicht in derselben Spalte wie Ihre Marke positionieren, wird dieser Teil des Rechtecks ​​überschrieben:

*Hello
 There
 I am▮ some code

mit dem gleichen Befehl ergibt sich:

I said o
I said e
I said  some code
Tikhon Jelvis
quelle
3
Sie sind die zweite Person, die gute Antwort Abzeichen zu verdienen :)
Nicael
Eine Alternative ist zu verwenden M-x string-insert-rectangle. Es ist sehr ähnlich, string-insert-rectangle fügt jedoch am Anfang jeder Zeile der Auswahl ein, während es string-rectangle ersetzt wird. Bei letzterer muss die Auswahl präziser sein, wenn Sie nichts überschreiben möchten.
Jeff Clites
32

Sie können den Mehrfachcursor-Modus verwenden , um einen Cursor auf jede Zeile zu setzen. Anschließend wird jeder eingegebene Text in jede Zeile eingefügt.

Sie würden mit dem Punkt am Anfang des Codestücks beginnen:

▮Hello
 There
 I am some code

Dann C->zweimal drücken. (Dies ist die vorgeschlagene Schlüsselbindung; Sie müssen sie selbst einrichten.) Dadurch werden in den folgenden beiden Zeilen zwei zusätzliche Cursor erstellt:

▮Hello
▮There
▮I am some code

Dann tippe I said. Der Text wird in jede Zeile eingefügt:

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

Drücken Sie RETzum Schluss, um den Mehrfachcursor-Modus zu verlassen und den Punkt am letzten Cursor zu belassen:

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

Hier ist ein Video, das zeigt, wie es funktioniert.

Legoscia
quelle
26

Persönlich bevorzuge ich replace-regexp(ersetze "^" durch "Ich sagte").

artagnon
quelle
12

Eine andere Option ist die Verwendung von Makros, die mehr Aufgaben als rechteckige Auswahlen oder mehrere Cursor verarbeiten können, auch wenn dies in diesem speziellen Fall etwas umständlicher ist.

Positionieren Sie den Cursor am Anfang der ersten Zeile und drücken Sie F3, um die Aufnahme zu starten, fügen Sie den Text ein, bewegen Sie den Cursor an den Anfang der nächsten Zeile und drücken Sie F4, um die Aufnahme zu stoppen. Drücken Sie jetzt F4erneut, um das Makro C-2 F4zu wiederholen, um es zweimal zu wiederholen, oder C-0 F4um es zu wiederholen, bis ein Fehler (z. B. Zeilenmangel) auftritt.

sanityinc
quelle
9

Sie könnten das Böse installieren und es auf eine beliebige Anzahl von vi-ähnlichen Arten tun - ich bevorzuge die visuelle Blockauswahl mit Ctrl+ V, um jede Zeile zu markieren, und dann Shift+, Ium den einzufügenden Text einzufügen, und dann, um den ESCEinfügemodus zu beenden und Der Text wird jeder Zeile vorangestellt. Dies ist der Auswahl von Emacs-Rechtecken sehr ähnlich, jedoch mit ein paar weniger Tastenanschlägen.

Alex Murray
quelle
7

Dies ist der Antwort von Artagnon sehr ähnlich, replace-regexpist aber an keinen Schlüssel gebunden.

Also verwende ich eigentlich, query-replace-regexpwas standardmäßig gebunden ist, C-M-%und ersetze dann ^mit dem angegebenen Präfix I saidund tippe dann ein !, um alle zu ersetzen, ohne weitere Aufforderung.

b4hand
quelle
4

Wenn Sie cua-modeaktiviert haben, dann:

  • C-a an den Anfang der Zeile zu bewegen,
  • C-RET um ein Rechteck zu beginnen,
  • (Nach-Unten-Taste) zweimal, um zur dritten Zeile zu gelangen.
  • I said als einzufügender Text
  • C-RET Rechteck beenden

Ich bevorzuge die cua-modeArbeitsweise im Vergleich zum Emacs-Standardrechteck, wo das Äquivalent wäre:

  • C-a an den Anfang der Zeile zu bewegen,
  • C-SPC um ein Rechteck zu beginnen,
  • (Nach-Unten-Taste) zweimal, um zur dritten Zeile zu gelangen.
  • C-x r t I said RET um text einzufügen

Das cua-modespart zwei Tastendrücke im Vergleich zum Standard-Emacs-Rechteck.

Aber für mich, der zusätzliche Vorteil , CUA-Modus ist , dass ich anfügen Text auf das Rechteck (ich persönlich weiß nicht , wie hängen Sie Text mit Standard - Emacs Rechteck). Im Cua-Modus ist es nur ein RETTastendruck, der vor dem eingegeben wird I said.

thdox
quelle