Blockbearbeitung * live * in Emacs oder Vim

9

jEdit unterstützt die Blockbearbeitung, aber Emacs und Vim scheinen einige schwerwiegende Usability-Probleme zum selben Thema zu haben. Wenn jemand hier die Unbekannten ausfüllen könnte, wäre es viel erträglicher, einen der beiden Editoren zu verwenden:

  • Tatsächliche rechteckige Auswahl : Wenn die Auswahl auf dem Bildschirm ein Rechteck ist, keine lineare Auswahl, die dann zur Berechnung einer Region verwendet wird, auf die Emacs beschränkt zu sein scheint.
    • jEdit: Halten Sie gedrückt Ctrlund wählen Sie.
    • Vim: Klicken Ctrl-vund auswählen.
    • Emacs: Unbekannt ; Es sieht so aus, als wäre ein Plugin mit mehr als 400 Zeilen erforderlich.
  • Rechteckige Live-Bearbeitung : Sehen Sie, wie das Ergebnis in allen Zeilen aussieht , wenn Sie nach einer Blockauswahl bearbeiten.
    • jEdit: Fangen Sie einfach an zu tippen, und Sie werden das Endergebnis sehen, wenn Sie gehen.
    • Vim: Klicken Shift-iund tippen. Das Endergebnis wird nur in der ersten Zeile angezeigt, bis Sie drücken Esc, um den Einfügemodus zu verlassen. Unbekannt, ob es eine Möglichkeit gibt, das Ergebnis sofort in allen Zeilen anzuzeigen.
    • Emacs: Unbekannt ; Es sieht so aus, als wäre der einzige Weg C-x r t, den Text so einzustellen, dass er nach dem Drücken ausgefüllt wird Ret.
  • Start- und Endauswahl an Positionen außerhalb des Textes : Ich möchte beispielsweise die N ersten Zeichen jeder Zeile entfernen, aber die erste und letzte Zeile enthalten weniger als N Zeichen.
  • Block inline einfügen: Fügen Sie den kopierten Block so ein, als würden Sie mehrere Zeilen einfügen. Schieben Sie den bereits vorhandenen Text nach unten und nicht nach rechts.
    • jEdit: Die Standardeinstellung. Um einen Block als Block einzufügen, müssen Sie zuerst eine andere Blockauswahl treffen.
    • Vim : OEscVp.
    • Emacs: Unbekannt .

Allgemeine Emacs-Blockauswahlfunktionen finden Sie im cua-modePlugin .

l0b0
quelle
Anscheinend kann der Spaltenbearbeitungsmodus von Emacs eine Art Live-Rechteckbearbeitung durchführen: youtube.com/watch?v=k-6BVjlBSVo
Tom
Nur eine Beobachtung über Emacs 400+ Zeilen "Plugin". Ein etwas ähnliches Addon für gedit, Multi-Edit genannt, hat 1000+ Zeilen Python-Code. Für mich ist der Pugin so nützlich (wie habe ich ohne ihn überlebt), die Größe ist akademisch ... und wenn der Emacs wie angekündigt funktioniert, würde ich ihn gerne verwenden, aber ich habe einen Ladefehler erhalten als ich es ausführte "Befehlszeile-normalisieren-Dateiname: Argumente außerhalb des Bereichs:" ", 1" :( ... Es ist genau das, wonach ich auch gesucht habe ..
Peter.O
4
Für diejenigen, die jEdit nicht verwendet haben, erläutern Sie bitte Ihre Terminologie. Ich verstehe nicht, was "live" hier bedeutet, was "live rechteckige Bearbeitung" ist oder was "Block inline einfügen" bedeutet.
Gilles 'SO - hör auf böse zu sein'

Antworten:

7

Ich kann für Vim antworten, aber nicht für Emacs.

Start und Ende der Auswahl an Positionen außerhalb des Textes:

:set virtualedit=blockaktiviert das gewünschte Verhalten. Sie können den ersten Doppelpunkt löschen und zu Ihrer .vimrc hinzufügen, wenn Sie möchten. Weitere Informationen erhalten Sie :help 'virtualedit'in Vim.

Block inline einfügen:

Wenn Sie nur pim Befehlsmodus drücken, fügt Vim den Block ein und schiebt die Zeichen in jeder Zeile nach rechts. Wenn Sie einen anderen Block auswählen und drücken p, ersetzt Vim diesen Block durch den eingefügten Block.

Sie können einen Block "zeilenweise" mit der Tastenfolge im Befehlsmodus einfügen OEscVp. Dies fügt eine Zeile über der aktuellen Zeile ( O Esc) ein, wählt sie zeilenweise aus ( V) und fügt sie dann ein ( p). Sie können dies (zum Beispiel) ypmit einer Zuordnung wie :nmap yp O<Esc>Vp- Typ, die wörtlich; Verwenden Sie fünf Tastenanschläge, <Esc>anstatt die Escape-Taste zu drücken.

Jander
quelle
Netter Tipp über virtualedit; muss das ausprobieren. Informationen zum Inline-Einfügen finden Sie in der aktualisierten Frage, um eine Beschreibung der erwarteten Funktionalität zu erhalten.
10b0
Ich habe meine Antwort mit einer Methode zum zeilenweisen Einfügen von Blöcken aktualisiert.
Jander
5

Zum Beispiel möchte ich die N ersten Zeichen jeder Zeile entfernen, aber die erste und letzte Zeile enthalten weniger als N Zeichen.

Emacs: Starten Sie die Auswahl in der ersten Zeile und fügen Sie einfach die fehlende Anzahl von Zeichen (z. B. Leerzeichen) in die letzte Zeile ein und verwenden Sie dann das Kill-Rechteck

Alternativ können Sie sehen artist-modeoder sehen, picture-modewie Sie sich unabhängig von der Linienlänge im Fenster frei bewegen können.

Block inline einfügen

Emacs: Speichern Sie den Block zuerst, indem Sie ihn entweder töten oder in einem Register speichern. Gehen Sie dann zur Einfügemarke, verwenden Sie das Löschrechteck und fügen Sie dann das gespeicherte Rechteck ein.

Es sieht so aus, als wäre ein Plugin mit mehr als 400 Zeilen erforderlich

Warum ist es bei Emacs ein Problem? Ein Plugin kann kompiliert werden und die Emacs-Philosophie lautet, dass Sie nicht alles in den Kern stellen, sondern Plugins verwenden, um den Editor zu erweitern.

Tom
quelle
4

Es gibt den 'cua-Modus', der mit Emacsen 22.1 und höher geliefert wird, oder folgen Sie dem Link zum Herunterladen für frühere Versionen von Emacs. Es gibt ein kurzes Video , in dem die Funktionalität vorgestellt wird.

Lesen Sie für allgemeine Rechteckbefehle das Handbuch , das eine einfache Einführung bietet.

Trey Jackson
quelle
Emacs cua-modesieht gut aus! +1 .. Ich konnte das von Ihnen erwähnte Video nicht finden, siehe Toms Link in den Kommentaren direkt unter der Frage, für einen Link zu einem (anderen?) Info-Video ...
Peter.O
@fered Ups, Fehler beim Ausschneiden / Einfügen behoben.
Trey Jackson
0

In vim ist der typische Weg, die ersten n Zeichen zu löschen, so etwas zu tun :%s/.\{0,6\}//.

%wird das ganze Dokument machen; Sie können dies durch eine Auswahl oder durch die tatsächlichen Zeilen ersetzen, die Sie interessieren. Der sBefehl ist für "Ersatz". Es ersetzt einen regulären Ausdruck durch das, was Sie ihm geben, und es stimmt nur einmal in jeder Zeile überein, es sei denn, Sie fügen eine bestimmte Option hinzu. Das /ist ein Trennzeichen - dies kann ein beliebiges Zeichen sein, wird jedoch /normalerweise verwendet, es sei denn, es ist vorteilhaft, etwas anderes zu verwenden (damit Sie /im Rest des Befehls nicht entkommen müssen ). Das Argument nach dem ersten Trennzeichen ist ein regulärer Ausdruck, mit dem übereinstimmende Zeichenfolgen in Ihrer Auswahl gefunden werden. Das Argument nach dem zweiten Trennzeichen ist, durch was die Übereinstimmung ersetzt wird.

Dieser Befehl besagt also, dass 0 bis 6 Instanzen eines Zeichens gefunden und durch nichts ersetzt werden sollen.

Shawn J. Goff
quelle
Nicht das, wonach ich gefragt habe.
10b0
Aber denkst du, es ist nicht nützlich für andere, die diese Frage finden? Ich denke es ist und deshalb habe ich es hier platziert.
Shawn J. Goff