正如@Drew所建议的,C-M-t
您想要做什么。规则是这样的:
- 将点放在两个性别中间。
- 按
C-M-t
(运行transpose-sexp
)。
- 在左SEXP总是向右移动与点一起。这是非常重要的,否则您将永远困惑。
或者,您可以简单地认为这不是移调,而只是向前移动,您必须将点放置在要移动的六边形之后。
但是,有一个便利,就是当您想向后移置左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)
该按钮始终在左侧向前/向后移动: