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?
Kurz gesagt, Sie starten die Auswahl wie gewohnt mit Control- Space, töten dann die Region mit Control- xrkund fügen (oder ziehen ) den getöteten Block mit Control- ein xry.
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).
Erwähnenswert ist, dass C-sC-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.
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.
... 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).
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 .
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:
mark-defun
Antworten:
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.
quelle
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 danachC-y
ersetzt dies den gezogenen Teil durch die anderen Schnipsel im Tötungsring.M-w
. . Region im Kill Ring speichern. WieC-w
, aber nicht löschen.Dies ist nur die grundlegende Verwendung. Marken haben auch andere Verwendungszwecke. Ich empfehle das Tutorial (
C-h t
).quelle
C-s
C-r
in diesem Zusammenhang häufig verwendet wird, um das Ende / den Anfang der Region zu ermitteln. (Besonders nützlich in einem Makro.)M-x indent-region
.indent-region
funktioniert zwar ganz gut, aber dasc-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.C-Spc
du zweimal triffst, wo du die Marke gesetzt hast. Dadurch wird der Transient-Mark-Modus vorübergehend aktiviert (bis Sie (mitC-g
) abbrechen ). Verschieben Sie dann den Punkt, um den ausgewählten Bereich anzuzeigen.Emacs 24.4 hat jetzt den Rechteck-Markierungsmodus. Cx Leerzeichen, um es aufzurufen.
quelle
Siehe den Artikel: "Arbeiten mit rechteckigen Auswahlen" , insbesondere den Kommentarbereich. Siehe auch den Abschnitt der Dokumentation zum CUA-Modus mit dem Titel "Unterstützung von CUA-Rechtecken". Es gibt auch ein schönes Video auf Vimeo .
quelle
Obwohl dies
C-SPC
ein ü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-h
undC-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-f
wählt ein ganzes Wort weiter. Dies istshift-select-mode
und 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-g
hä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 Sie
M-w
und 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 Sie
diff-hl-mark-hunk
diese Option, um ein Stück auszuwählen / zu markieren.quelle
Verwenden Sie Control- Space, um eine Markierung zu setzen und den Cursor zu bewegen.
Das
transient-mark-mode
hebt die Auswahl für Sie hervor. M- xtransient-mark-mode
.Sie können Emacs so einrichten, dass dieser Modus standardmäßig mithilfe einer Anpassung aktiviert wird. M- x
customize-option
RETtransient-mark-mode
.quelle
... 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
Zitat aus einer Antwort auf eine SO-Frage.
quelle
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 .
quelle
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:
quelle