Wie entferne ich die (zuletzt verwendete) Standardzeichenfolge in einigen Emacs-Funktionen?


12

Ich habe das folgende Problem: Wenn ich 'Cx rt' (Zeichenfolge-Rechteck) verwende, werde ich aufgefordert, eine Zeichenfolge einzugeben, um das ausgewählte Rechteck zu ersetzen. Sagen wir, ich tippe ";;" (um das Rechteck auszukommentieren). Dies funktioniert einwandfrei, aber wenn ich das nächste Mal die gleiche Funktion aufrufe und durch nichts ersetzen möchte (leere Zeichenfolge), kann ich das nicht tun, weil es "default" string "gibt ;;" das ich vorher benutzt habe, und wenn ich nur drücke, gebe den Befehl ein und benutze das ";;" Zeichenfolge anstelle einer leeren. Wie setze ich es auf leere Zeichenfolge?

Ähnliches Problem hatte ich mit einigen Suchen / Ersetzen-Funktionen. Wie kann ich eine leere Zeichenfolge "eingeben", wenn sie sich an die zuletzt verwendete Zeichenfolge erinnert und diese auf den Standardwert setzt?

EDIT:

Kill-Rectangle, das von YoungFrog erwähnt wurde, löst das spezifische Problem, aber ich hatte ein anderes Problem im Sinn: Grundsätzlich merkt sich Emacs in jeder Funktion den zuletzt eingegebenen Wert und verwendet ihn als "Standard", wenn Sie einfach die Eingabetaste drücken in der Lage, diese "Standardeinstellung" auf die tatsächliche Standardeinstellung zurückzusetzen, bevor Sie die Funktion zum ersten Mal verwendeten. Hier ist ein weiteres Beispiel:

Wenn Sie im dired-Modus "Mx rgrep" wählen, werden Sie nach 3 Eingaben gefragt:

1) Nach was zu suchen ist: was auch immer Sie hier eingeben, wird als Standard verwendet, wenn Sie das nächste Mal rgrep verwenden. Wie bereits erwähnt, macht es keinen Sinn, nach einer leeren Zeichenfolge zu suchen. Das Löschen dieses "Standard" -Werts ist also vermutlich nie erforderlich.

2) Als nächstes wird gefragt, nach welchen Dateien gesucht werden soll. Die Standardeinstellung ist "alle" Dateien. Wenn ich * .txt eingebe und das nächste Mal suche, wenn ich rgrep verwende, wird * .txt als "Standard" verwendet. Jetzt möchte ich dieses "default" * .txt löschen und zu seinem ursprünglichen Standard "all" zurückkehren, so wie ich ";" "default" in der Zeichenfolge-Rechteck-Funktion ist eine echte leere Standardzeichenfolge.

Natürlich könnte dieses spezifische Problem für alle Dateien möglicherweise durch Eingabe von * gelöst werden. Dieses allgemeine Problem besteht jedoch weiterhin bei anderen Befehlen, die sich an den zuletzt verwendeten Wert erinnern.

3) Als nächstes wird nach dem Basisverzeichnis gefragt, hier kein Problem.

So wie ich es sehe, sollte es eine Möglichkeit geben, den verwendeten Wert zu löschen, als ob ich ihn nie benutzt hätte, wenn Emacs versucht, mir zu helfen, indem er sich an meinen zuletzt verwendeten Wert in einem Befehl erinnert (der mir die meiste Zeit sehr hilfreich ist) Befehl vor.

PS Ich bin noch neu in Emacs, und möglicherweise wird die von mir benötigte Funktionalität nicht benötigt, da es immer einen Workaround gibt.


1
Ich glaube, das ist schwierig, weil das Lesen und der Austausch des Standardwerts für die leere Zeichenfolge in den meisten Fällen nicht in der gleichen Funktion erfolgt. In diesem speziellen Fall delete-rectangleist eine Option.
Politza

Wenn Sie im ausgewählten Rechteck Leerzeichen einfügen möchten, können Sie verwenden clear rectangle.
Kaushal Modi,

Wenn Sie Kommentare / Kommentare einfach sperren möchten, warum nicht comment-dwim? Auch die Eingabe einer "leeren" Zeichenfolge für die Suche ist nicht sinnvoll, Sie können jedoch eine leere Zeichenfolge für das Ersetzungselement eingeben. Ich bin gespannt auf weitere Beispiele, bei denen ein Benutzer möglicherweise eine leere Zeichenfolge eingeben muss.
Kaushal Modi,

3
Wir haben uns Ihre Beschreibung schnell angesehen, aber es scheint, als ob ein Problem mit der Befehlsauslegung vorliegt string-rectangle. Wann immer eine leere Zeichenfolge als mögliche Eingabe sinnvoll ist, sollte es eine Möglichkeit geben, sie einzugeben, im Gegensatz zur Annahme eines Standardwerts. Schauen Sie sich das Dokument für den Befehl genau an (und den Quellcode, falls Sie damit vertraut sind), um festzustellen, ob hier tatsächlich ein Konstruktionsfehler vorliegt. Wenn Sie denken , da ist, dann melden Sie es bitte: M-x report-emacs-bug.
Drew

Für 2)das können Sie buchstäblich eingeben all, was sich geringfügig unterscheidet von *: es passt .*auch.
Npostavs

Antworten:


3

Verwenden Sie nicht C-x r t( string-rectangle), sondern C-x r k( kill-rectangle).


1
Ich habe nur das angegebene spezifische Beispiel beantwortet, weil IMO der allgemeine Fall (die Frage im Titel) keine (allgemeine) Antwort zulässt. Dennoch möchte ich erwähnen, dass C-j(anstelle von RET) in einigen Fällen, z. B. im Ido-Modus, Abhilfe schaffen kann.
YoungFrog

3

Im allgemeinen Fall kann das, was Sie wollen, nicht erreicht werden. Dies liegt daran, dass mehrere Dienstprogramme und Modi in Emacs ihren Verlauf der Beendigung des Lesevorgangs in verschiedenen Variablen und nicht an einem Ort speichern. Sie können diese Verlaufsvariablen manuell auf nil(für Ihr C-x r tBeispiel (setq string-rectangle-history nil)) setzen, sie werden jedoch nicht skaliert. Es ist auch nicht einfach, die Namen der Verlaufsvariablen zu ermitteln, ohne den Code zu lesen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.