Emacs:如何在不使用kill ring的情况下删除文本?

92

我想删除一些文本,以便可以复制其他文本而不是它。我该怎么做?使用C-w剪切所选文本到kill ring并且我最终没有想要复制的文本。

另外,有没有可能直接复制文本而不是按下按钮将其删除?


参见:https://dev59.com/qm025IYBdhLWcg3wvIq2 - phils
2
请参考下面的答案,您可以使用键盘上的退格按钮回答第一个问题,对于第二个问题,请标记文本。 - Kevin Zhu
你定义完代码块后,是不是只需要使用 C-x r k 就可以了呢? - yalu2015
15个回答

1
如何不使用kill ring删除文本? delete-region函数将删除所选区域而不将其添加到kill ring中。
此外,是否可能直接粘贴文本而无需按按钮将其复制到kill ring中?
我认为您正在询问如何用已经放在kill ring上的内容替换所选区域中的文本。
设置(delete-selection-mode 1)将允许您在所选区域上进行粘贴/粘贴操作。它还允许您只需键入即可替换所选区域。
在OS X上的版本25.1.1上,我还必须添加(setq select-enable-primary nil)以防止将所选区域复制到kill ring中。

1

添加一个删除 kill-region 和 kill-line 键 C-w 和 C-k 的等效键,如下所示。绑定到键 C-v 和 C-z。

;; 一个 keybinding to delete-region 给出了一个很好的“Windows CUT Ctrl-x 等效”。
;; 选择使用哪个键绑定是很棘手的。
;; 使用 C-v “Windows PASTE Ctrl-v” 是一个相当颠覆性的选项。
;; C-v = emacs 中向上滚动,我没有用处。
(global-set-key (kbd "C-v") 'delete-region)
;; 为了也有一个“Windows CUT”的替代方案 C-k(kill-line),可以这样做: (defun delete-line () "delete line, take it out of kill ring. bind this func to C-z" (interactive) (setq last-command 'delete-line) (kill-line) (setq kill-ring (cdr kill-ring)) (setq kill-ring-yank-pointer kill-ring) (setq last-command 'delete-line) ) (global-set-key (kbd "C-z") 'delete-line) ;; 没有设置 last-command,2+ C-zs 会搞乱 kill-ring

1

我的回答是:在emacs中标记文本(使用鼠标或设置标记C-SPC),而不是使用C-w,按键盘上的“<- Backspace”按钮。这样,您仍然可以将文本粘贴到系统剪贴板中,而不必担心剪贴板被C-w删除的文本覆盖。

此答案的背景是:有时候我需要用emacs中的某些文本替换在emacs之外的文本,我通常会先将该文本复制到系统剪贴板中(即在Windows上使用Ctrl + C),然后在emacs中使用C-w“删除”我想要替换的文本区域,希望稍后使用M-w可以从kill-ring中恢复我的剪贴板中的文本。不幸的是,剪贴板会被C-w删除的文本覆盖,原始消息将永远不会显示在kill-ring中。

对于第二个问题,是的,您可以始终在emacs中先标记文本,然后直接使用C-y


1
作为所有答案的补充。 如果您编写elisp代码以进行删除,只要使用本地kill-ring对象调用kill函数即可,如下所示:
(defun delete-something()
  "Delete something without storing in kill ring."
  (let (kill-ring)
     (kill-something)))

使用任何一个杀死某物的函数来替代kill-something。该函数将删除内容,而在真正的kill-ring中不会保留任何内容。


0
这是一个版本的kill-region,它不会强制将值放入kill-ring中。
(defun kill-or-delete-region (beg end prefix)
  "Delete the region, storing it in the kill-ring.
If a prefix argument is given, don't change the kill-ring."
  (interactive "r\nP")
  (if prefix
      (delete-region beg end)
    (kill-region beg end)))

(global-set-key (kbd "C-w") 'kill-or-delete-region)

这使您可以像以前一样使用C-w,但C-u C-w现在会删除文本而不更改kill-ring。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接