开始也只是想实现一个交换选区的功能,但是希望在操作上更“无感”一些,把它附着在 yank 上,少占用快捷键,减轻记忆负担。然后我看 @xuchunyang 已经写了一个 swap-regions.el,就压着没放出来。
后来把其他操作也慢慢纳进来,不再适合叫 swap 了,就一直在琢磨起个什么名字,拖了很久。直到最近才决心整理一下。由于是不同时期的代码,也没有整体的规划,难免有些乱(包括命名和代码组织)。不过好在我写了不少测试,保证这些功能都符合我的预期,将来重构如果改偏了也能很快发现。
以下是效果展示(我用到了 hydra 和 evil):
交换选区(支持跨 buffer)

交换光标左右的内容

交换选区左右的内容

移动 sexp (也可以是 word 和 line)

以 sexp(也可以是 word 和 line)作为步长移动选区内容

在临时 buffer 中重新排列当前列表中的 sexp

欢迎建议,pr 或者修改英语语法错误😅