Wie wähle oder markiere ich einen Block in Emacs?

83

Ich möchte einen Block in Emacs auswählen oder hervorheben, ohne die Maus zu verwenden, aber dies über die Tastatur tun, wie im visuellen Modus von vim. Was ist der einfachste Weg, dies über eine Tastatur zu tun?

Systemfehler
quelle
2
CMhmark-defun
nachlaufender Schrägstrich

Antworten:

66

Schauen Sie sich das Regionsrechteck in Emacs an.

Kurz gesagt, Sie starten die Auswahl wie gewohnt mit Control- Space, töten dann die Region mit Control- x r kund fügen (oder ziehen ) den getöteten Block mit Control- ein x r y.

Marko
quelle
11
Das tötet keine Regionen, sondern Rechtecke, was sich meiner Erfahrung nach stark vom visuellen Modus von vim unterscheidet.
Allen
2
Wo ist der Unterschied?
Ken Williams
73

Wenn ich die Frage richtig verstehe, geht es ursprünglich nicht um rechteckige Bereiche.

C-Spc markiert die aktuelle Position.

Wo immer sich Ihr Cursor danach befindet, wird der Text zwischen der letzten Markierung und der aktuellen Position "ausgewählt" (Sie können dies durch Aktivieren hervorheben transient-mark-mode, dies bedeutet jedoch auch, dass Markierungen gelöscht werden müssen, wenn Sie keine Hervorhebung wünschen).

Sie können diese Region mit folgenden Befehlen bearbeiten:

C-w. . Region töten. Dadurch wird die Region gelöscht und in den Tötungsring versetzt.
C-y. . Ruck. Dadurch wird das letzte Snippet aus dem Kill Ring eingefügt.
M-y. . Zyklus töten Ring. Unmittelbar danach C-yersetzt dies den gezogenen Teil durch die anderen Schnipsel im Tötungsring.
M-w. . Region im Kill Ring speichern. Wie C-w, aber nicht löschen.

Dies ist nur die grundlegende Verwendung. Marken haben auch andere Verwendungszwecke. Ich empfehle das Tutorial ( C-h t).

Svante
quelle
6
Erwähnenswert ist, dass C-s C-rin diesem Zusammenhang häufig verwendet wird, um das Ende / den Anfang der Region zu ermitteln. (Besonders nützlich in einem Makro.)
ocodo
Nun, es sind sehr gute Befehle, aber ... Wie wählt man die markierte Region aus? Immerhin brauche ich es noch, dh um den Code zwischen den Markierungen einzurücken.
Hi-Angel
Der Bereich zwischen der letzten Markierung und dem aktuellen Punkt (an dem sich Ihr Cursor befindet) ist der ausgewählte Bereich. Lauf einfach M-x indent-region.
Svante
@Svante Nein, es ist nicht ausgewählt. Das indent-regionfunktioniert zwar ganz gut, aber das c-indent-line-or-region(das, das an die Tabulatortaste gebunden ist) nicht. Die letzte Funktion funktioniert nicht für die markierten Regionen, sondern für die ausgewählten Regionen, dh für die Region, die hervorgehoben wird, als hätten Sie sie mit der Maus ausgewählt.
Hi-Angel
2
@YagamyLight Ah, du kannst das tun, indem C-Spcdu zweimal triffst, wo du die Marke gesetzt hast. Dadurch wird der Transient-Mark-Modus vorübergehend aktiviert (bis Sie (mit C-g) abbrechen ). Verschieben Sie dann den Punkt, um den ausgewählten Bereich anzuzeigen.
Svante
32

Emacs 24.4 hat jetzt den Rechteck-Markierungsmodus. Cx Leerzeichen, um es aufzurufen.

Christopher M. Hobbs
quelle
1
Wie verschiebt man den Rechteckblock?
Stryker
10

Obwohl dies C-SPCein üblicher Weg ist, um etwas von jedem Punkt aus zu markieren, gibt es oft schnellere / einfachere Wege, bei denen nicht explizit zu Start- / Endpunkten gewechselt wird ...

Integrierte Auswahlverknüpfungen

  • M-h- ein wichtiges Mittel zum Markieren eines Absatzes . Ein "Absatz" bedeutet oft einen Codeblock.

  • C-M-hund C-M-@- zum Markieren von Sexps bzw. Defuns . Dies funktioniert für mehrere Sprachen, nicht nur für Lisps.

  • Halten Sie die Umschalttaste gedrückt - eine weitere raffinierte Methode, um während der Bewegung hervorzuheben. ZB M-S-fwählt ein ganzes Wort weiter. Dies ist shift-select-modeund es ist standardmäßig in Emacs 24+ aktiviert. Bei einigen (Nicht-Chiclet-) Tastaturen sollten Sie in der Lage sein, C-S-mit einem einzigen kleinen Finger gedrückt zu halten .

Sie können eine dieser Tasten wiederholt drücken, um die Auswahl zu erweitern.

(HINWEIS: Verwenden Sie diese Option C-ghäufig, um die Markierung während des Experimentierens abzubrechen.)

Add-Ons

Es gibt einige Zusatzpakete , die die Auswahl von Regionen und Dingen verbessern. Diese spielen alle gut zusammen und passen zu verschiedenen Anwendungsfällen. Benutze sie alle!

  • Region erweitern : Region erweitern erweitert die ausgewählte Region um semantische Einheiten. Drücken Sie einfach die Taste, bis Sie auswählen, was Sie möchten. C-=ist eine empfohlene Bindung dafür. Schlagen Sie es ein paar Mal, um das zu bekommen, was Sie brauchen.

  • Easy-Kill : Verwenden SieM-wund eine Mnemonik, um verschiedene Arten von Dingen auszuwählen, wie Wörter, Sexps, Listen usw.

  • Zop-to-Char : Wie Zap-to-Char , bietet jedoch eine gute Auswahl und andere menügesteuerte Aktionen.

  • diff-hl : Markieren Sie nicht festgeschriebene geänderte Regionen. Verwenden Siediff-hl-mark-hunkdiese Option, um ein Stück auszuwählen / zu markieren.

Micah Elliott
quelle
7

Verwenden Sie Control- Space, um eine Markierung zu setzen und den Cursor zu bewegen.

Das transient-mark-modehebt die Auswahl für Sie hervor. M- x transient-mark-mode.

Sie können Emacs so einrichten, dass dieser Modus standardmäßig mithilfe einer Anpassung aktiviert wird. M- x customize-option RET transient-mark-mode.

remvee
quelle
1

... und falls Sie Ubuntu verwenden und C-spcnicht für Sie arbeiten: Sie müssen die IBus-Tastenkombination "Nächste Eingabemethode" wie in löschen

Führen Sie ibus-setupdie Schlüsselbindung für "Nächste Eingabemethode" aus und ändern Sie sie in eine andere (oder löschen Sie sie vollständig, indem Sie auf die Schaltfläche "..." und dann auf die Schaltfläche "Löschen" klicken).

Zitat aus einer Antwort auf eine SO-Frage.

serv-inc
quelle
0

Um die Antwort von Edin Salkovic zu erweitern, können Sie im CUA-Modus eine visuelle Blockauswahl starten. Es gibt viele Verknüpfungen zur Steuerung der Blockauswahl, die in der Dokumentation von CUA beschrieben sind .

Jérôme Pouiller
quelle
-1

Drücken Sie bei Emacs 25 einfach C- Spaceund bewegen Sie den Cursor an eine beliebige Stelle, um den gewünschten Textbereich hervorzuheben / auszuwählen. Danach benötigen Sie möglicherweise die folgenden Befehle:

  • C- wzum Schneiden.
  • M- wzum Kopieren.
  • C- yzum Einfügen.
Billal Begueradj
quelle