@Drewが示唆C-M-t
したように、あなたが望むことをします。ルールは次のとおりです。
- 2つのsexpsの中央にポイントを置きます。
C-M-t
(実行transpose-sexp
)を押します。
- 左のS式は常にポイントと一緒に右に移動します。これは非常に重要です。さもないと、終わりがありません。
または、これは移調ではなく単に前進するだけであると単純に考えることができます。移動したいsexpの後にポイントを配置する必要があります。
しかし、便利な方法が1つあります。左のsexpを後方に転置したい場合、同じものを使用しますC-M-t
が、負のプレフィックス引数が指定されているため、不便です。別の問題は、ポイントが後方に転置された左sexpに追従しないことです。この問題を解決するために、逆バージョンを作成しますtranspose-sexps
:
(defun reverse-transpose-sexps (arg)
(interactive "*p")
(transpose-sexps (- arg))
;; when transpose-sexps can no longer transpose, it throws an error and code
;; below this line won't be executed. So, we don't have to worry about side
;; effects of backward-sexp and forward-sexp.
(backward-sexp (1+ arg))
(forward-sexp 1))
次に、デフォルトのEmacsのC-M-y
隣にC-M-t
あり、フリーであるバインドします。
(global-set-key (kbd "C-M-y") 'reverse-tranpose-sexps)
これがデモです。(MY-SEXP1)
常に左にあることに注意してください。