Gibt es in Emacs eine Funktion apply-function-to-region?

8

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

    
dola 30.06.2011, 09:45
quelle

5 Antworten

2

Ich stimme der Antwort von Lindydancer zu und möchte hinzufügen, dass es vielleicht einen einfacheren Weg gibt, um Ihr Ziel zu erreichen. z.B. die eingebaute Funktion delete-matching-lines . : -)

    
sanityinc 30.06.2011, 11:42
quelle
5

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%     
phils 30.06.2011 14:14
quelle
3

Eine einfache Lösung besteht darin, ein Makro zu definieren, das Ihre Funktion aufruft, und dann das gute alte% apply-macro-to-region-lines .

zu verwenden

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.

    
Lindydancer 30.06.2011 11:38
quelle
3

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%     
zev 30.06.2011 19:15
quelle
-1

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.

    
Will Hartung 30.06.2011 15:56
quelle

Tags und Links