Text auswählen, ohne den Cursor zu bewegen

8

Ich möchte eine Auswahl vergrößern, ohne den Punkt (den Cursor) von seiner Position zu bewegen. Ich weiß, dass ich immer C-u C-spczum vorherigen Standort wechseln kann, aber das möchte ich vermeiden.

Insbesondere möchte ich beide Operationen ausführen:

  • Wählen Sie den gesamten Text im Puffer aus
  • Fügen Sie der Auswahl schrittweise nachfolgende Zeilen / Absätze hinzu

während Sie den Cursor dort halten, wo er ist.

Hat Emacs dafür interaktive Funktionen? Sind sie an Tastaturkürzel gebunden?

Amelio Vazquez-Reina
quelle
Sie können jederzeit mit zum vorherigen Punkt zurückkehren C-u C-spc.
Malabarba
1
Können Sie mir bitte sagen, was könnte das Interesse sein, Text auszuwählen, ohne den Cursor zu bewegen?
Nsukami _

Antworten:

12

Für jeden der aufgeführten Punkte gibt es eine separate Antwort:

  1. Die Emacs-Standardbindung C-x hwählt den gesamten Puffer aus, unabhängig davon, wo sich der Cursor befindet.

  2. Das Paket zur Erweiterung der Region wird dazu beitragen, das zweite Ziel einer schrittweisen Erweiterung der Auswahl zu erreichen. expand-regionwählt schließlich auch den gesamten Puffer aus, während Sie die Region weiter erweitern. Weitere Informationen finden Sie in der Readme-Datei auf Github. Dieses Paket ist über MELPA erhältlich.

Hier ist eine kurze Einführung in dieses Paket von seinem Github:

Region erweitern erhöht die ausgewählte Region um semantische Einheiten. Drücken Sie einfach die Taste, bis Sie das gewünschte Produkt auswählen.

Ein Beispiel:

 (setq alphabet-start "abc def") 

Wenn sich der Cursor auf c befindet, markiert er zunächst das gesamte Wort abc und erweitert es dann zum Inhalt der Anführungszeichen abc def, dann zum gesamten Anführungszeichen "abc def" und dann zum Inhalt des sexp setq alphabet-start "abc def "und schließlich zum gesamten sexp.

Ich möchte jedoch hinzufügen, dass das Ändern der Regionsauswahl in beiden Fällen den Cursor immer noch bewegt.

Kaushal Modi
quelle
+1, aber beachten Sie, dass C-x hsich der Cursor bewegt: zum Ende des Puffers und dann zum Anfang des Puffers. Sie müssen C-u C-spczweimal dorthin zurückkehren, wo Sie waren.
ShreevatsaR
9

Wenn die Region wächst, ändert der Cursor die Position. Dies liegt daran, dass sich der Cursor immer an einem Ende der Region befindet.

Wenn Sie den gesamten Puffertext auswählen ( C-x hund dann C-x C-xPunkt und Markierung tauschen, sodass sich der Cursor am Ende des Textes befindet) und dann weiteren Text eingeben, haben Sie das erreicht, was Sie möchten: Die Region war erweitert, um den eingegebenen Text einzuschließen. (Dies setzt voraus, dass Sie nicht eingeschaltet haben delete-selection-mode.)

Die Region wurde ebenfalls automatisch deaktiviert, sodass der Regionstext nicht mehr hervorgehoben wird. Um die Region wieder zu aktivieren, tun C-x C-xSie dies (was Sie wiederholen können, wenn Sie den Cursor am Pufferende halten möchten.

Drew
quelle
4

Wie bereits erwähnt, ist das expand-regionPaket großartig, aber ich finde es auch erwähnenswert easy-kill. Es wird als Ersatz ersetzt kill-ring-save, der die normale M-w"Kopie" in einen dynamischen Kopierbefehl verwandelt, der auch als Präfix zum Speichern verschiedener Dinge dient. Zum Beispiel M-wwürde die aktive Region, URL, E-Mail oder aktuelle Zeile (in der Reihenfolge von easy-kill-try-things) M-w dkopiert , gefolgt von einem "d" , aber die aktuelle Definition wird zwangsweise kopiert.

Es gibt auch eine Methode zum Erweitern / Verkleinern der aktuellen Auswahl, ähnlich expand-regionwie einen Befehl easy-markzum Markieren von Regionen, ohne den aktuellen Punkt zu ändern.

Waymondo
quelle
1

Wenn Sie etwas kopiert haben, können Sie der Auswahl später Text hinzufügen, indem Sie Folgendes verwenden C-M-w:

  • Kopieren Sie eine Zeile / Region
  • mach etwas anderes
  • Sie möchten etw an den zuvor kopierten Text anhängen: type C-M-w( append-next-kill) und dann kopieren, was Sie wollen ( M-w).
Ehvince
quelle
1

Wie in anderen Antworten angegeben:

C-xh wählt den gesamten Puffer aus; (mark-whole-buffer)

Wenn Sie Ihre Auswahl erweitern möchten, verwenden Sie am einfachsten die mark-*Befehle.

Als Beispiel für eine Schlüsselbindung:

C-M-SPC (mark-sexp)markiert den Sexp am Punkt. Wenn Sie den Befehl wiederholen, wird der Auswahl das folgende Geschlecht hinzugefügt. Der Cursor bleibt an der aktuellen Position oder bewegt sich zum Anfang des Objekts (Absatz / Geschlecht), um sicherzustellen, dass es vollständig markiert ist.

Jonathan Leech-Pepin
quelle
Prelude- (mark-whole-buffer)Zuordnungen zu <kbd> Cmd-a </ kbd> unter OSX, um eine gewisse Ähnlichkeit mit der typischen OSX-Funktionalität zu erhalten.
Aaron Lee
1

Wenn Sie mit der Maus einverstanden sind, können Sie die sekundäre Auswahl verwenden . Drücken Sie Meta, klicken Sie und ziehen Sie die linke Maustaste ( M-drag-mouse-1). Dadurch wird der Punkt nicht verschoben, solange Sie nur Text kopieren, der auf dem Bildschirm angezeigt wird. Sie können die sekundäre Auswahl mit M-mouse-3kopieren und mit ziehen M-mouse-2.

Abgesehen von der sekundären Auswahl müssen Sie den Cursor bewegen, um beliebigen Text auszuwählen, da der Cursor ein Ende der Auswahl ist (das andere ist die Markierung).

Wenn Sie in einem Puffer arbeiten möchten, ohne den Punkt zu beeinflussen, können Sie den Puffer in einem zweiten Fenster ( C-x 2oderC-x 3 ) öffnen . Jedes Fenster hat seinen eigenen Punkt. Wenn Sie mit der Auswahl und anderweitigen Bearbeitung fertig sind, schließen Sie das Fenster ( C-x 0) und kehren Sie zum anderen zurück.

Für mehr Flexibilität können Sie den aktuellen Puffer klonen. Führen Sie aus M-x clone-indirect-bufferoder C-x 4 cerstellen Sie ein neues Fenster mit diesem Puffer. Der Klon hat den gleichen Text wie das Original, aber eine eigene Markierung und einen eigenen Punkt.

Wenn Sie bereits Text getötet haben, können Sie mehr Text anhängen, indem Sie C-M-w( append-next-kill) eingeben und dann einen Befehl kill verwenden. Zum Beispiel C-M-w C-khängt den Schwanz der aktuellen Zeile mit dem Text, der bereits an der Vorderseite des Kill - Rings ist, und löscht den kopierten Text. C-M-w M-wHängt die Auswahl an den Text an der Vorderseite des Kill-Rings an (im Gegensatz dazu wird M-wder ausgewählte Text als neuer Eintrag im Kill-Ring verschoben ).

Gilles 'SO - hör auf böse zu sein'
quelle