Lassen Sie mich ein Tastatur-Makro definieren: Ich gebe ein C-x (, gehe dann zum Anfang mit M-<und M-%tippe, um einige Vorkommen von foo durch Balken abzufragen und zu ersetzen . Von 3 gefundenen Vorkommen ersetze ich nur die letzten 2, speichere dann mit C-x C-sund beende das kbd-Makro mit C-x ). Gut gemacht!!
Wenn ich jetzt das kbd-Makro in einem anderen Puffer ausführe, werde ich nicht gefragt, ob ich foo durch bar ersetzen möchte. Es werden genau meine vorherigen Nein-Ja-Ja-Antworten reproduziert und das 2. und 3. Vorkommen ersetzt! Es wird nicht nach dem 4. oder 5. Vorkommen gefragt (dieser 2. Puffer enthält mehr Foo s) !! Dies habe ich nicht erwartet, als ich das Makro definiert habe. Ich wollte, dass es anruft query-replace
und ich seine Fragen beantworten kann ...
Nebenfrage: Findest du das nicht falsch? [Ich kann M-x edit-last-kbd-macro
und sehe, was aufgezeichnet ist und verstehe die Logik von allem, aber ich finde das immer noch falsch.]
Echte Frage: Was hätte ich verwenden können, anstatt query-replace
mein kbd-Makro wie erwartet zum Laufen zu bringen?
start-kbd-macro-dwim
.
M-%
- und gibt sie genau wieder. Ich habe noch nie ein Makro mit interaktiven Teilen gesehen und würde es auch nicht erwarten. An dieser Stelle ist es wahrscheinlich besser, eine normale interaktive Elisp-Funktion zu schreiben.