Was ist der Nutzen von "Punkt und Zeichen tauschen"?

16

Der exchange-point-and-markBefehl ist gebunden an C-x C-x, aber ich kann mir keine Anwendungsfälle vorstellen, die eine solch herausragende Bindung verdienen würden.

Wie kann ich die verwenden exchange-point-and-mark, um meine Bearbeitungstechnik zu verbessern?

Matthew Piziak
quelle

Antworten:

19

Ich kann mir zwei Fälle vorstellen: das Reaktivieren der Region und das Anpassen der Größe der Region.

Ich verwende diese Bindung meistens, um die Region zu reaktivieren, nachdem ich einen Befehl ausgeführt habe, der sie deaktiviert, oder etwas getan habe, das Markierungen setzt und Punkte bewegt, ohne die Region zu aktivieren.

Zum Beispiel ein Cs machen und nach etwas suchen. Drücken Sie RET, um die Suche zu beenden, und dann Cx Cx, um alles zu markieren, von dem aus Sie die Suche gestartet haben.

Ein weiteres Beispiel, das ich häufig mache, wenn ich ein Beispiel für elisp in eine StackExchange-Antwort aufnehmen möchte:

  1. Markieren Sie den Code, den Sie kopieren möchten.
  2. Drücken Sie die Tabulatortaste Cu Cx, um den Code um 4 Leerzeichen einzurücken. Auf diese Weise wird es hier auf der Site als Code gerendert. Dieser Schritt deaktiviert die Region.
  3. Drücken Sie Cx Cx, um die Region erneut zu aktivieren, und dann Mw, um sie in die Zwischenablage zu kopieren, damit ich sie in meine StackExchange-Antwort einfügen kann.

Der andere Fall ist, wenn Sie eine Region markieren und sie vergrößern / verkleinern möchten. In diesem Fall ist es praktisch, an das "andere Ende" der Region zu springen, es zu verschieben und dann zurückzuspringen. Wenn die Region bereits aktiv ist, wird sie durch Drücken von Cx Cx aktiviert, sodass Sie beide Enden verschieben können.

Glucas
quelle
17

Fragen Sie Emacs: C-h r i exchange-point-and-mark REToder besser C-h r i C-x C-x RET. Hiermit gelangen Sie zu den unten gezeigten Informationen.

Dies ist die Antwort auf Ihre Frage im Emacs-Handbuch, Node Setting Mark :

C-x C-xDies ist nützlich, wenn Sie mit der Position des Punkts zufrieden sind, aber das andere Ende der Region (wo sich die Markierung befindet) verschieben möchten . Mit C-x C-xeinem zweites Mal, wenn nötig, setzt die Marke auf die neue Position mit dem Punkt zurück in seiner ursprünglichen Position. Normalerweise reaktiviert dieser Befehl, wenn die Marke inaktiv ist, zuerst die Marke, wo immer sie zuletzt gesetzt wurde, um sicherzustellen, dass die Region hervorgehoben bleibt. Wenn Sie es jedoch mit einem Präfix-Argument aufrufen, bleibt die Markierung inaktiv und die Region wird nicht hervorgehoben. Sie können dies verwenden, um auf ähnliche Weise zur Marke zu springenC-u C-<SPC> .

Und dies ist, was es darüber im Knoten Disabled Transient Mark sagt :

Wenn Sie [ transient-mark-mode] ausschalten, wechselt der Emacs in einen anderen Betriebsmodus:

  • Durch Setzen der Markierung mit Befehlen wie C-<SPC>oder C-x C-xwird die Region nicht hervorgehoben. Daher können Sie nicht erkennen, wo sich die Markierung befindet. du musst dich erinnern.

    Die übliche Lösung für dieses Problem besteht darin, die Markierung zu setzen und sie dann bald zu verwenden, bevor Sie vergessen, wo sie sich befindet. Sie können auch überprüfen, wo sich die Marke befindet, indem SieC-x C-x die Positionen des Punkts und der Marke austauschen - siehe Setzen der Marke .

Wenn der Transient Mark-Modus deaktiviert ist, können Sie ihn vorübergehend mit C-<SPC> C-<SPC>oder aktivieren C-u C-x C-x.

und:

C-u C-x C-x Tauschen Sie Punkt und Marke aus, aktivieren Sie die Marke und aktivieren Sie den Transient Mark-Modus vorübergehend, bis die Marke das nächste Mal deaktiviert wird. (Dies ist der C-x C-xBefehl exchange-point-and-markmit einem Präfixargument.)

Drew
quelle
8

Ich verwende diese Option, wenn ich eine Auswahl aufgrund eines Vorgangs verloren habe, durch den sie entfernt wurde, und ich die Auswahl wiederherstellen möchte. Ein solches Szenario wäre:

  1. Rechteck auswählen.
  2. Töte es.
  3. Tötungsrechteck rückgängig machen.
  4. C-x C-x um die Auswahl im Rechteck wiederherzustellen.

Dies geschieht, wenn ich ein Ad-hoc-Backup eines ausgewählten Bereichs erstellen und mit der Kopie experimentieren möchte, z. B., wenn ich ein Suchen und Ersetzen durchführen möchte, mir aber keine Möglichkeit einfällt, dies zu tun es auf eine Weise, die keinen Text zerstört, der verbleiben soll, so dass ich ihn später von der Kopie zurücknehmen würde.

wvxvw
quelle
8

Die anderen Antworten konzentrieren sich auf die Nützlichkeit, C-x C-xwann transient-mark-modeaktiv ist. Aber C-x C-xdatiert transient-mark-modeund ist unabhängig davon nützlich.

Die Hauptaufgabe von C-x C-xist das Vertauschen von Punkten und Markierungen. Dies ist nützlich, wenn Sie zwei Punkte in einem einzigen Puffer bearbeiten und aus irgendeinem Grund das aktuelle Fenster nicht teilen möchten. Nehmen Sie eine Bearbeitung vor, setzen Sie die Markierung, verschieben Sie sie an eine andere Stelle im Puffer, nehmen Sie eine Bearbeitung vor C-x C-x, nehmen Sie eine Bearbeitung an der vorherigen Stelle vor C-x C-x, nehmen Sie eine weitere Bearbeitung vor, und machen Sie eine Pause. (Wenn Sie nicht vorhaben, zum zweiten Punkt zurückzukehren, ist dies C-u C-SPCmöglicherweise intuitiver. Lesen Sie den Markierungsring im Emacs-Handbuch nach.)

Wenn transient-mark-modedeaktiviert ist, C-x C-xhat dies einen weiteren wichtigen Zweck: Sie können herausfinden, wo sich die Region befindet. Wieder ein C-x C-xkurzer Blick auf den Punkt C-x C-x.

(Und für den Fall, dass Sie sich fragen - ja, einige von uns bevorzugen es immer noch, Emacs mit transient-mark-modeBehinderung zu verwenden.)

jch
quelle