Wie wähle ich eine Spalte aus und bearbeite sie dann in GNU Emacs?

15

Ich benutze ViM, TextMate und GNU Emacs seit Jahren.

Zum Beispiel ist hier der Text, den ich bearbeiten möchte

foo
foo
foo

Und hier ist das Textergebnis, das ich haben möchte

bar foo
bar foo
bar foo

Wenn ich bei Vim bin, kann ich in der ersten Zeile und in der ersten Spalte "Strg v" ausführen, dann "2 j" drücken, dann "i" drücken und dann "bar" eingeben, fertig.

Wenn ich auf Textmate bin, kann ich "Apple Command Option" drücken, während ich (mit der Maus) nach unten wähle, und dann "bar" eingeben, fertig.

Aber wenn ich auf GNU Emacs 23.1 bin, weiß ich nicht, wie ich das machen soll. : ((

Ich suchte in EmacsWiki und googelte herum, bekam aber keine Lösung. Bitte leiten Sie mich, wenn Sie meine Lösung kennen. Wäre dafür dankbar.

Arie
quelle
@Trey Jackson und @humble coffee, gelöst, vielen Dank !!
Arie

Antworten:

16

Zwei Möglichkeiten kommen in den Sinn. Das erste sind Rechtecke (wie in einer anderen Antwort erwähnt). Die expliziten Anweisungen dafür sind:

  1. gehe zur ersten Zeile, erste Spalte
  2. C-SPC
  3. gehe zur letzten Zeile (erste Spalte)
  4. C-x r t bar SPC RET

Eine andere Option, die sehr schöne Rechteck- / Spaltenbearbeitungsbefehle bietet, ist der CUA-Modus . Hier ist ein Blog-Beitrag (Veröffentlichung: mein Blog), in dem die Verwendung beschrieben wird. Um zu sehen, wie leistungsfähig der CUA-Modus ist, lohnt es sich, dieses dreiminütige Video anzusehen .

Ich integriere den CUA-Modus mit den folgenden Elementen (da ich es vorziehe, keinen vorübergehenden Markierungsmodus zu verwenden):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)
Trey Jackson
quelle
11

In Emacs-24.4 wurde die Basisunterstützung für Rechtecke etwas verbessert. Anstatt also C-SPCgefolgt von zu verwenden C-x r t, können Sie Folgendes tun:

C-x SPC
down down
C-t bar RET

Das Schöne an der C-SPCMethode ist, dass Sie ein visuelles Feedback zum ausgewählten Rechteck erhalten. Natürlich cua-modefunktioniert die Methode auch (und funktioniert ähnlich).

Stefan
quelle
Leider scheint es mir, dass die Verbesserungen überhaupt nicht ausreichen: cua-modeHätte es besser ... Nur um eine Sache zu erwähnen: cua-modeWährend ein Rechteck hervorgehoben ist, kann ich Text eingeben und hinzufügen. In der aktuellen eingebauten Emacs-Basisunterstützung wird die Markierung ausgeblendet (die Auswahl wird aufgehoben) und die Eingabe wird an der Cursorposition eingefügt. Dies ist kontraintuitiv und nicht das, was ich normalerweise möchte (und cua-mode
gewöhne
@ShinTakezou: Während Sie den Zähler im Rechteckmarkierungsmodus intuitiv finden, finde ich den Verhaltenszähler von cua intuitiv. Zum Glück können Sie wählen. Wenn Sie die Unterstützung von Cua bevorzugen, können Sie entweder den Cua-Modus aktivieren oder (wenn Sie nur die Rechteck-Unterstützung wünschen) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Stefan
Tatsächlich ist es das, was ich tue: Ich halte mich an den Cua-Modus. Es funktioniert wie folgt: Eine Spalte markieren, Text eingeben, fertig. Andernfalls: Markieren Sie eine Spalte, sagen Sie, Sie möchten Text hinzufügen, geben Sie Text in den Minipuffer ein (Sie werden ihn nicht im Puffer sehen, wenn Sie ... eingeben), ... Fertig. Sie werden später einen Tippfehler im letzten Zeichen sehen ... im Cua-Modus kann ich ihn sehen, während ich tippe, ihn lösche (nicht das ganze Einfügen rückgängig machen), überdenken, ein anderes Zeichen einfügen ... und das Rechteck bleibt hervorgehoben Übrigens, wenn ich es brauche, kann ich es verkleinern, vergrößern, etwas mehr Text eingeben oder das neue Rechteck "ausschneiden" ... für mich ist es intuitiver und komfortabler.
ShinTakezou
Ich bin froh, dass es dir gefällt ;-)
Stefan
Übrigens zeigt Ihnen in Emacs-25 die Nicht-CUA-Rectange- C-tOperation (aka C-x r t) auch eine Vorschau des neu eingefügten Texts, während Sie ihn eingeben .
Stefan
2

In Emacs werden solche Spalten als "Rechtecke" bezeichnet. Also dies ist die entsprechende Dokumentation Seite.

Alle diese Befehle setzen voraus, dass die Region das Rechteck enthält, mit dem Sie arbeiten. Sie müssen also die Markierung für das obere linke Zeichen im Rechteck setzen und den Bereich bis zum unteren rechten Zeichen im Rechteck erweitern. Der Befehl, nach M-x string-insert-rectangledem Sie suchen, fordert Sie dann auf, die Zeichenfolge einzufügen.

nedned
quelle
1

Kürzeste Antwort: Aktivieren Sie den CUA-Rechteckmodus über C-RET.

Also, für Ihren Fall wäre es

  1. Gehen Sie zur ersten Zeile, ersten Spalte und drücken Sie C-RET, um den CUA-Modus aufzurufen
  2. Gehe zur letzten Zeile, ersten Spalte und tippe einfach barSPC
  3. Verlassen Sie den CUA-Modus über ESCoder CG

Eine ausführlichere Lösung und Links zu CUA finden Sie in der Antwort von @Trey.

Martin
quelle
2
Ja, ich habe zu wenig Ansehen, um einen Kommentar abzugeben. Ich möchte seine Antwort nicht wiederholen, aber ich werde weitere Informationen aus dem CUA-Dokument hinzufügen.
Martin
0

Sie können hierfür replace-regexp verwenden:

  1. setze die Markierung auf die letzte Zeile -> C SPC und gehe zur letzten Zeile
  2. tippe Mx replace-regexp RET im Minibuffer (ich habe eine Schlüsselbindung für diesen Mr)
  3. Gib ^ RET
  4. Tippe bar und drücke RET

Dies fügt dem Zeilenanfang einen Balken hinzu.

Neelesh
quelle