Viele meiner Arbeiten beinhalten das Suchen und Löschen von unnötigen Codezeilen. Also erstelle ich ein Makro, wähle dann alle Zeilen (C-x h)
und führe dann den Befehl (apply-macro-to-region-lines)
aus. Ich habe es geschafft, diesen Befehl zu speichern und in meine .emacs
-Datei zu speichern. Ich nannte es cut_it_now
. Aber jetzt ist meine Funktion kein Makro mehr, daher kann ich die Funktion (apply-macro-to-region-lines)
nicht mehr verwenden.
Weißt du, ob irgendwo (apply-function-to-region-lines)
implementiert ist?
Vielen Dank,
D
Beachten Sie, dass Sie apply-macro-to-region-lines
immer noch mit einem aus dem Code generierten Makro verwenden können, vorausgesetzt das Makro ist als Vektor oder Zeichenfolge definiert. Mit einem benutzerdefinierten apply-named-macro-to-region-lines
[2] können Sie das Makro auswählen, das interaktiv verwendet werden soll.
Emacs hat zwei Möglichkeiten, Code aus einem Tastaturmakro zu generieren, abhängig von der verwendeten Methode.
Wenn Sie kmacro-name-last-macro
verwenden (gebunden an Cx Ck n ), dann generiert Emacs eine Funktion aus dem Makro, das für diesen speziellen Zweck nicht direkt nützlich ist [1].
Wenn Sie name-last-kbd-macro
verwenden, um Ihr Makro zu benennen, wird es als Vektor oder Zeichenfolge generiert.
In beiden Fällen verwenden Sie insert-kbd-macro
, um den Code zu erhalten.
Tatsächlich ist das Vektor / String-Format der Standard, so dass Sie den Benennungsschritt umgehen und sofort nach dem Code fragen können (geben Sie RET an der Namensaufforderung ein, um das zuletzt definierte Makro anzugeben) und bearbeiten Sie dann den Standardnamen des eingefügten Codes manuell.
[1]: Die Vektorform scheint einfach in die Funktionsdefinition eingebettet zu sein, also sollten Sie in der Lage sein, diese aus dem Code zu extrahieren, um eine Makrofunktion im Vektorformat manuell neu zu definieren.
[2]: Als ich diese Antwort ursprünglich schrieb, hatte ich vergessen, dass dies eine benutzerdefinierte Funktion war. Tut mir leid.
%Vor% Eine einfache Lösung besteht darin, ein Makro zu definieren, das Ihre Funktion aufruft, und dann das gute alte% apply-macro-to-region-lines
.
Abgesehen davon glaube ich, dass Sie in ein paar Zeilen elisp eine Schleife schreiben könnten, die genau das tut, wonach Sie fragen. Wenn Sie etwas Besonderes sein möchten, können Sie den Benutzer sogar nach dem Namen der Funktion fragen. Ich denke, das ist eine gute Übung für elisp, ich kann Ihnen mit einigen Zeigern helfen, wenn Sie das Gefühl haben, dass Sie es selbst ausprobieren möchten.
Die folgende Funktion sollte tun, was Sie wollen:
%Vor%Also, wenn Sie die folgende Funktion haben, die Sie gegen Zeilen in einem Puffer anwenden möchten:
%Vor%Und wenn Ihr Puffer folgenden Inhalt enthält:
%Vor%Wenn Sie eine Region auswählen, die nur die Linien 2 & amp; 3, geben Sie "M-x Anwendungsfunktion-zu-Region-Linien" ein, und geben Sie "Test" als Funktionsname ein, wenn Sie dazu aufgefordert werden. Sie erhalten das folgende Ergebnis in Ihrem Puffer:
%Vor% Sie könnten die Quelle immer in apply-macro-to-region-lines
kopieren und sie so optimieren, dass sie eine übergebene Funktion aufruft und somit Ihre eigene Version erstellt.