Wie wird auf Rechtecke über das Zeilenende hinaus reagiert?

16

Hier ist, was die Dokumentation von Vim dazu sagt:

Virtuelle Bearbeitung bedeutet, dass der Cursor dort positioniert werden kann, wo kein tatsächliches Zeichen vorhanden ist. Dies kann sich auf halber Strecke in einem Tab oder über das Zeilenende hinaus befinden. Nützlich, um ein Rechteck im visuellen Modus auszuwählen und eine Tabelle zu bearbeiten.

Ich würde dies am liebsten als Nebenmodus oder als integrierte Einstellung sehen.

Kindermädchen
quelle
Möchten Sie dies für die Auswahl eines Rechtecks? In diesem Fall ist dies die Standardeinstellung in der aktuellen Entwicklungsversion.
Malabarba
Nein, ich denke eher, wie Rechtecke zu ziehen / zu ersetzen. Ich benutze den Rechteck-Markierungsmodus und obwohl es eine nette Funktion ist, ist es nicht das, wonach ich suche.
Kindermädchen
Tatsächlich wäre es beim Ziehen / Ersetzen von Rechtecken ein natürlicher Begleiter der vorhandenen Funktionalität im Rechteckmarkierungsmodus. Ich bin mir nicht sicher, wie die Benutzeroberfläche aussehen soll.
Stefan
Danke für die Antwort, Stefan. Diese Funktion ist am nützlichsten, wenn Sie sich mit Rechtecken befassen. Im Rechteckmarkierungsmodus kann ein Befehl also den Modus für die virtuelle Bearbeitung umschalten. Im Moment sieht der Punkt im Rechteckmarkierungsmodus so aus, als ob er sich in einem virtuellen Bearbeitungsmodus befindet: Er kann sich mit über das Ende einer Linie bewegen C-f. Wenn Sie danach an einem Rechteck ziehen, wird das Rechteck an der Markierung anstelle des Punkts angezeigt. Wenn es an dem Punkt auftauchte, würde dies das Problem lösen.
Kindermädchen

Antworten:

10

Die extend-rectangle-to-endFunktion im rectangle-utilsPaket ist was Sie wollen. Es ist an melpa.

Es werden Leerzeichen eingefügt, um die aktuelle Rechteckauswahl so zu erweitern, dass sie die längste Linie in der Region abdeckt.

Um dieses Verhalten zu erhalten, habe ich dies in meinem init.el. C-x r eist an nichts anderes in Vanille-Emacs gebunden

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)
Tintenfisch
quelle
1
Um dies zu verdeutlichen, wählen Sie mit diesem Paket die Region aus und dann M-x extend-rectangle-to-endund dann C-x r M-woder C-x r k.
Kaushal Modi
18

Eine andere Antwort: verwenden M-x picture-mode. Sie können Rechtecke durch die Mitte von Tabulatoren usw. töten oder kopieren, sie an Register senden usw.

Drew
quelle
3
Ein Vorteil dieser Methode besteht darin, dass Sie genau steuern können, wie breit Ihre Rechteckauswahl sein soll. Wenn ich Zeile 1 mit 30 Zeichen und Zeile 2 mit 5 Zeichen habe, kann ich das Rechteck so wählen, dass es 15 Zeichen breit und 2 Zeilen hoch ist. kann das nicht mit machen, extend-rectangle-to-endda die Rechteckauswahl damit immer 30x2 ist.
Kaushal Modi
1
picture-modeist alt und wenig bekannt. Unter anderen wenig bekannten Merkmalen: Exiting ( C-c C-c) entfernt abschließende Leerzeichen.
Drew
1
Das ist großartig, Drew! Frage: Gibt es einen Grund, nicht zu raten rectangle-minor-mode, sich "einwickeln" zu lassen picture-mode? (Hinweis da ich keine Haken in der Quelle von sehe rectangle-minor-mode).
Rasmus
1
Ist hier mein Rat, übrigens. Whitespace wird nicht entfernt, da dies hier (defun rectangle-mark-mode-wrapped-in-picture-mode (orig-fun &rest args) (if rectangle-mark-mode (picture-mode) (and (eq major-mode 'picture-mode) (picture-mode-exit t)))) (advice-add 'rectangle-mark-mode :around #'rectangle-mark-mode-wrapped-in-picture-mode)
irgendwie unangebracht