如何把光标当前所在行的文本内容移动到buffer中的另一行后

spacemacs

#1

希望在Spacemacs中,通过helm swoop搜索方式匹配出当前buffer中的某一含有搜索关键字的line/heading,然后通过一个操作,把当前光标所在的line或heading所辖的内容移动或复制到helm swoop中匹配的line/heading的前后位置上去。

这种操作在macOS的todo软件TaskPaper中实现了,叫做“Move to Project”,也就是将当前光标所在的line的文本内容移动到“Move to Project”所调出pop-up中匹配出的heading上(TaskPaper中是只能移动到Project类型的line或heading的,无法实现移动到任何line或heading)。

TaskPaper这个操作非常方便将一个todo从一个Project转移动到另一个Project下,但是有时候,需要将当前todo或行的内容,转移到其它任意line或heading下。这个功能,TaskPaper暂时没有实现。

谢谢。


#2

如果是 org-mode 的话,可以用 org-refile

如下图,将 inbox.org 中的一个 headline 移动到了 task.orgWriting 一节下,相应的配置是

(setq org-refile-targets
      '(("~/Dropbox/org/inbox.org" :level . 1)
        ("~/Dropbox/org/task.org" :level . 1)))

Refile and copy


#3

这个org-file操作,可以用于将heading移动到同一个buffer/文件中的另一个heading下吗? (我刚才试了一下,在同一个org文件中,尝试将head2移动到head3下,启动org-file操作,结果什么也没发生。然后反馈信息是,“user-error: Please indicate a target file in the refile path ”)

请指正。


#4

Please indicate a target file in the refile path ,你有把这个文件加到 org-refile-targets 这个变量么?


#5

这个配色好妖气。。。。。


#6

:joy: 注意看是 emacs24 ,几年前自己调的色……现在老老实实用现成的主题了……


#7

问题解决了。

刚才我的问题出在使用的是scratch buffer,没有保存为文件。

一旦保存为文件后,再测试org-refile和org-copy,就都成功了!!

这个方案很好地解决了针对org文件的heading间移动/复制问题。

谢谢您。


那么,对于非org文件的任意当前行文本,移动/复制到其它任意匹配的文本行下,如何可以实现呢? 是否存在着基于Helm swoop的某种更普适的方案呢?

希望大家能再进一步深挖一下普适方案哈。


#8
(defun move-content-line-to-another-window (&optional N)
  "移动当前光标下 N 行到另一个窗口,只适用于 2 个窗口的情况.

Usage:

1. 打开文件, 光标移动到粘贴文本的位置:

    +------------+
    |            |
    |  window 1  |
    |            |
    +------------+

2. 分割窗口 `C-x 2', (把 window 1 中的)光标移动到剪切文本的位置:

    +------------+
    |  window 1  |
    |------------|
    |  window 2  |
    +------------+

3. 执行 `move-content-line-to-another-window',从 `window 1' 
剪切 1 或 N 行文本到 `window 2'。

也可以在不同文件之间剪切。"

  (interactive "P")
  (kill-whole-line N)
  (save-window-excursion
    (switch-window)
    (yank)))

其他功能自己发挥了。


#9

这个文档写的好直观。。。。


#10

犀利 我想实现类似的功能,在同一个BUFFER里移动选中的行,正好可以借鉴一下:grinning:


#11

移动行用move-text这个包