Hier ist ein weiterer Befehl (aus der Bibliothek misc-cmds.el
), der ziemlich genau das tut, was Sie verlangen. Binden Sie es einfach an einen einzelnen Schlüssel ( C-M-t
oder was auch immer). Verwenden Sie diese Option, um ein Sexp wiederholt vorwärts und rückwärts zu bewegen.
Ein negatives Präfix arg transponiert rückwärts, transpose-sexp
aber es lässt point auch bereit, eine weitere Rückwärtstransposition durchzuführen. Und beim Wiederholen kehrt ein negatives Präfix arg nur die Richtung um.
Wenn Sie also den Befehl beispielsweise an binden, C-o
wird das Sexp, das sich links vom Punkt befindet, dreimal nach rechts, dann zweimal nach links und dann einmal nach rechts verschoben.C-o C-o C-o
C--
C-o C-o
C--
C-o
Ein numerisches Präfix arg wirkt sich nur beim ersten Gebrauch aus, dh nicht bei Wiederholungen - bei Wiederholungen ist die Bewegung immer ein Geschlecht auf einmal.
(defun reversible-transpose-sexps (arg)
"Reversible and repeatable `transpose-sexp'.
Like `transpose-sexps', but:
1. Leaves point after the moved sexp.
2. When repeated, a negative prefix arg flips the direction."
(interactive "p")
(when (eq last-command 'rev-transp-sexps-back) (setq arg (- arg)))
(transpose-sexps arg)
(unless (natnump arg)
(when (or (> emacs-major-version 24)
(and (= emacs-major-version 24) (> emacs-minor-version 3)))
(backward-sexp (abs arg)) (skip-syntax-backward " ."))
(setq this-command 'rev-transp-sexps-back)))
(Hinweis: Das Verhalten von transpose-sexps
in 24.4 geändert, daher hier der Versions-Test. Vor 24.4 endete der Punkt an der richtigen Stelle, um fortzufahren (z. B. Wiederholen). Ab 24.4 ist der Punkt dafür an der falschen Stelle Eine Regression oder das Hinzufügen einer nützlichen Funktion oder das Beheben eines anderen Fehlers liegt vermutlich im Auge des Betrachters. ;-) Ich habe Emacs- Fehler # 20698 dafür eingereicht , gerade eben.)