Bei der Suche nach einer Zeichenfolge mit C-s
möchte ich in der Lage sein, eine Taste zu drücken, um den Suchmodus zu verlassen, aber dennoch die Auswahl der Übereinstimmung beizubehalten. Auf diese Weise kann ich sofort mit der Eingabe beginnen und die letzte Übereinstimmung ersetzen.
Angenommen, ich habe das folgende Dokument:
The quick brown fox jumps over the lazy dog.
Wenn ich nach "faul" suche, wählen Emacs dieses Wort wie folgt aus (eckige Klammern sind Auswahl, Pipe ist Cursor):
The quick brown fox jumps over the [lazy|] dog.
Wenn ich jetzt drücke return, behält emacs meine Cursorposition bei, deaktiviert jedoch "faul":
The quick brown fox jumps over the lazy| dog.
Stattdessen möchte ich eine Verknüpfung, die den Suchmodus beendet, aber die aktuelle Übereinstimmungsauswahl beibehält, wie im zweiten Status oben.
M-x query-replace
was du suchst?C-s
und einzugeben, wonach ich suchen möchte, und dann die Abfrage mit Rücktaste auf Null zu ändern, um das zu ändern, was ich ändern möchte. Dann spiele ich mit dem herum, durch was ich es ersetzen möchte.M-%
ist zu "formal".query-replace
löst das nicht.Antworten:
Hier ist ein Ansatz:
Dies bindet einen anderen Schlüssel (C-Return), um die aktuelle Suche zu beenden und auch die zuletzt ausgewählte Übereinstimmung zu belassen. Dies funktioniert
isearch-forward-regexp
auch, was praktisch ist.quelle
bind-key
das?bind-key
kommt aus einer anderen Bibliothek. Ich habe die Antwort geändert, umdefine-key
stattdessen die integrierte Funktion zu verwenden.Mit Library Isearch + können Sie dies ganz einfach tun und sogar im laufenden Betrieb ein- und ausschalten.
Die Option Nicht-Null
isearchp-set-region-flag
legt automatisch die Region (Auswahl) um das letzte Suchziel fest, wenn Sie die Suche beenden.Befehl
isearchp-toggle-set-region
, gebunden anM-s M-SPC
während der Suche schaltet die Option umisearchp-set-region-flag
.Der Befehl
set-region-around-search-target
legt die Region um das letzte Suchziel manuell fest. (Auch wenn die Option nicht festgelegt ist und Sie keine automatische Auswahl erhalten, können Sie dies manuell tun.)Mit Library Replace + können Sie dasselbe für
query-replace
usw. tun . Dadurch wird die Region um das letzte Ersetzungsereignis herum angeordnet (dh ausgewählt). Es verwendet dieselbe Option,isearchp-set-region-flag
um dies zu steuern, und der Befehlset-region-around-search-target
hat den gleichen Effekt.quelle