Emacs:如果不考虑随后的杀戮,如何抽出最后一个猛拉的文字?

Ree*_*Law 31 emacs kill yank

我经常发现自己在做了一些杀戮之后反复做一些东西,它变成了一个过程:

  1. CY
  2. Cy我的
  3. Cy My My
  4. Cy My My My

每当我杀死一些文本时,它会在kill ring中推回第一个kill,这样我就需要遍历所有的杀戮以返回我想要的文本.我想要做的是反复猛拉同一文本,同时杀死文本之间的冲突.这可能吗?

Sea*_*ean 20

不要使用杀环; 将文本放入寄存器中. C-x r s a将该地区的文本存入(比如)注册"a"; 然后C-x r i a将其插入其他地方.


Jua*_*cho 19

这是一个奇怪的黑客,但可能有所帮助.

您第一次使用M-y时通常会出现错误(之前没有猛拉).所以这个想法是第一次你得到最后一次猛击而不是最后一次击杀.

为了存储最后一次猛拉,我在这个例子中使用'Y'寄存器.

这两个函数将包围yank和yank-pop.你期待错误,我期待建议.

(defun jp/yank (&optional arg)
  "Yank and save text to register Y"
  (interactive)
  (set-register ?Y (current-kill 0 t))
  (yank arg))

(defun jp/yank-pop (&optional arg)
  "If yank-pop fails, then insert register Y"
  (interactive)
  (condition-case nil
      (yank-pop arg)
    (error (insert (get-register ?Y)))))

(global-set-key (kbd "M-y") (quote jp/yank-pop))
(global-set-key (kbd "C-y") (quote jp/yank))
Run Code Online (Sandbox Code Playgroud)


Sin*_*ned 5

你可以使用它M-x delete-region来杀死文本,如果你想大量使用它,可能会将它绑定到一个键.

  • 我建议将`delete-region`绑定到Cc k :-) (2认同)
  • 此外,最新版本的Emacs中的Backspace执行`delete-region`.选择一个区域并按Backspace将其删除,而不将其推入杀环.可以使用`delete-active-region`选项自定义此行为. (2认同)