我自己经常用到
-
交换选区
虽然是多年 Emacs 用户,对 Kill ring 还是有点不太顺手,所以就有了这个想法。
-
交换光标上下/左右内容
一直以来写 elisp 都比较喜欢这样排版:
(if cond1 (if cond2 (progn (foo) (bar) (qux "quux")) ))
为的的就是方便剪切/调整
progn
中的语句,降低编辑出错概率。有这种就纠结的不止我一个:但有时候一个孤零零的
)
单独一行不太好看,比如(let ((...)))
末尾的括号。所以就想要一个可以原地直接交换的操作,不仅以光标为中心,还可以以选区为中心交换距离比较远的内容。在非 lisp 语言中也能用,比如调换数组/参数的顺序,而不必担心中间的逗号。
最后一个,对于复杂的跨多行的列表,直接进入临时 buffer,把列表中的元素简化成行来重新排序。
-
移动光标/选区内容
是交换操作的另一种形式,更直观一些。
如果选中
(
或)
前后移动,还可以实现类似 smartparens/paredit 中的 slurp/barf 效果:(foo (qux ["quux")] bar) -> (foo (qux bar "quux")) ;; forward (foo (qux "quux") [bar)] -> (foo bar) (qux "quux") ;; backward
paredit-forward-slurp