如何将杀死的矩形复制到杀死环


11

我经常从缓冲区中提取文本的矩形,但随后发现我想像不是矩形一样拉动文本。有没有办法将当前的终止矩形添加到终止环?

GNU Emacs的手册有这样一段话:

“杀死”一个矩形并不是通常意义上的杀死。矩形不存储在终止环中,而是存储在仅记录最近终止的矩形的特殊位置。这是因为拉动矩形与拉动线性文本非常不同,因此必须使用不同的拉动命令。没有为矩形定义弹出弹出框。

但是,我基本上可以得到我想要的行为

  • M-> 转到缓冲区末尾
  • C-x r y 矩形
  • C-x C-x 交换点和标记(选择新标记的线)
  • C-w 杀死选择到杀死环

有没有更好的方法可以将被杀死的矩形变成杀伤环的入口?


连接解决方案是不是你问什么,但像你想它猛拉矩形:emacs.stackexchange.com/a/46352/15749

Answers:


6

如果我理解您的问题,那么您正在寻找这样的东西:

(defun youngfrog/copy-rectangle-to-kill-ring (start end)
  "Saves a rectangle to the normal kill ring. Not suitable for yank-rectangle."
  (interactive "r")
  (let ((lines (extract-rectangle start end)))
    (with-temp-buffer
      (while lines ;; insert-rectangle, but without the unneeded stuff
        ;; (most importantly no push-mark)
        (insert-for-yank (car lines))
        (insert "\n")
        (setq lines (cdr lines)))
      (kill-ring-save (point-min) (point-max)))))

ErgoEmacs提供


3

不确定在杀伤环中放置矩形有什么特别之处,但是如果升级到Emacs-24.4,则可以执行以下操作:C-x SPC .... M-w选择一个矩形并将其放置在杀伤环上。之后,C-y将拉出该矩形(也是如此C-x r y)。


关于杀伤环,有两件事是“特殊的”。(对我而言,最重要的是)杀死环上的物品的方式。简而言之,拉杆将现有文本向下移动,而不是向右移动。使用终止环还具有维护终止文本历史记录的附带好处。听起来24.4可能会提供第二个好处,但不能提供第一个好处。
nispio 2014年

嗯,确实,在这种情况下,24.4的新行为改进了您无关紧要的部分。
Stefan 2014年

1

最初,我对缺少此问题的内置解决方案感到恼火,然后意识到有一个内置解决方案:kill-rectangle。

假设您有类似的文字

AAA BBBBBBBBB
AAA BBB
AAA BBBBBBB

但要将文本的“ B”部分放在其他位置,例如这些C和D行之间:

CCCCC
CCC
DDDD
DD

如果复制B矩形(C-x r M-w),然后将点放置在第一个'D',然后将矩形向后拉(C-x r y),则最终得到

CCCCC
CCC
BBBBBBBBBDDDD
BBB      DD
BBBBBBB  

你真正想要的地方

CCCCC
CCC
BBBBBBBBB
BBB
BBBBBBB
DDDD
DD

复制'B'的矩形并将其猛拉到新位置似乎很自然,但是更好的解决方案是简单地复制'A和'B'线并将它们整体拉到'C'和' D'线。

然后,标记包含'A'的矩形,并使用kill-rectangleC-x r k)以所需的结果结尾。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.