如何科学的移动代码块

搜了一些相关的 包括 drag-stuff 感觉都不是很理想

需求:

1.选中代码区域时 上下左右移动 区域

2.未选中区域时 上下左右移动当前行

直接用我的插件吧。

https://github.com/manateelazycat/move-text

还需要加上左右

(defun shift-text (distance)
  (if (use-region-p)
      (let ((mark (mark)))
        (save-excursion
          (indent-rigidly (region-beginning)
                          (region-end)
                          distance)
          (push-mark mark t t)
          (setq deactivate-mark nil)))
    (indent-rigidly (line-beginning-position)
                    (line-end-position)
                    distance)))

(defun shift-right (count)
  (interactive "p")
  (shift-text (if (null count) 1 count)))

(defun shift-left (count)
  (interactive "p")
  (shift-text (if (null count) -1 (- count))))

我用的这个包,感觉很好用,你可以试试看。还可以向上向下复制当前行 :grinning:

demo

2 个赞

发帖之后应 review,语句不顺要调整。

不能像即时聊天,发送之后将错就错,置之不理。

已修复 感谢指出问题

主要是没有左右呀。感觉大家都不需要左右移动

左右移动就是另外的操作了。可以用multiple-cursors 或者矩形编辑

移动代码块就是剪切和粘贴啊,这个的复杂性不是在如何快速的选到你要移动的内容吗?

3 个赞

drag-stuff 有左右移动啊

MoveText 2.0.0 is a re-write of the old move-text and compatible with >= Emacs 25.1

Original v1.x was a Feature extracted from basic-edit-toolkit.el - by Andy Stewart (LazyCat)

(这些在github的readme里面没有,只在melpa的package description里面有

都是十多年在emacswiki写的代码,各种人拿到我代码做包,我的代码一个包都没有,但是有人经常给我发邮件修issue,囧

大神就是大神。。。。

drag-stuff 看起来不错。

不过还是自己写的用着更顺手:攒了一个移动/交换光标/选区内容(regions/sexps/lines/words)的扩展

支持:

  • 交换任意两个 region
  • 交换光标/选区左右的 sexp
  • 前/后移动 sexp/word/region
  • 上/下移动行
  • 把 list 元素提取到临时缓冲进行排序

配合 hydra 使用效果比较好。

1 个赞

可能我的使用姿势不对 我在试试

可以参考下我的配置,很简单的。用 Alt+方向键可以实现上下左右移动。