Emacs:如何删除文本没有杀戒?

我想删除一些文本,以便我可以抽出一些其他的文本而不是它。 我怎样才能做到这一点? CW剪切选定的文本杀死戒指,我最终没有我想要的文本被抽出。

另外,是否有可能直接拉扯文本, 而不是一些文本,甚至没有button来杀死它?

我经常键入Mx delete-region ,但可以将其绑定到一个键。

使用新版本的Emacs中的删除select模式 ,您不必input命令就可以input:

默认情况下,即使标记处于活动状态,文本插入也会正常进行 – 例如,键入a将插入字符“a”,然后取消标记。 删除select模式(次要模式)会修改此行为:如果启用该模式,则在标记处于活动状态时插入文本将导致首先删除该区域中的文本。 另外,通常只删除一个字符的命令(如CdDEL )将删除整个区域。 要打开或closures“删除select”模式,请键入Mx delete-selection-mode.

您可以使用My after Cy从杀戒中插入前一个项目,或者使用browse-kill-ring包。

至于第二个问题,请参阅DeleteSelectionMode 。

我有同样的问题。 到目前为止,最接近的事情就是做一个小function,本质上是:

 (defun ruthlessly-kill-line () "Deletes a line, but does not put it in the kill-ring. (kinda)" (interactive) (move-beginning-of-line 1) (kill-line 1) (setq kill-ring (cdr kill-ring))) 

采取从EmacsWiki :

相当于'kill-line''C-k' ),但没有杀死副作用:

 (delete-region (point) (line-end-position)) 

Mx eval-expression(setq kill-ring(cdr kill-ring)) – 从杀死环中删除最后一个项目

对于第二个问题,或者对于DeleteSelectionMode,您可以启用CUA模式 ,此模式还会为您提供一个由C-Return启用的漂亮的矩形select模式。 从22.1开始,CUA模式是emacs的一部分。

从技术上讲,其他答案在第一部分是错误的。

这是我的实施和动机:

 (defun delete-word (arg) "Delete characters backward until encountering the beginning of a word. With argument ARG, do this that many times." (interactive "p") (delete-region (point) (progn (backward-word arg) (point)))) 

我使用simple.elkill-word ”来simple.el 。 我用delete-region转换kill-regionbackward-word forward-word delete-region 。 这种方式不会影响kill-ring ,不像其他的情况,在emacs之外,我注意到kill-ring被影响了。

find了一个答案。

首先在这里发表。

 ;; Ctrl-K with no kill (defun delete-line-no-kill () (interactive) (delete-region (point) (save-excursion (move-end-of-line 1) (point))) (delete-char 1) ) (global-set-key (kbd "Ck") 'delete-line-no-kill) 
 (defun copy-to-register-z (p1 p2) "Copy text selection to register named “z”." (interactive "r") (copy-to-register ?z p1 p2)) (defun replace-register-content-z (p1 p2) "Replace register named “z”'s content." (interactive "r") (delete-region p1 p2) (insert-register ?z)) (global-set-key (kbd "Cc c") 'copy-to-register-z) (global-set-key (kbd "Cc v") 'replace-register-content-z) 

按如下方式添加删除区域和删除行键Cw和Ck。 绑定到密钥Cv和Cz。

 ;; 键区删除区域提供了一个很好的“Windows CUT Ctrl-x等价物”。
 ;; 什么键绑定使用是尴尬的select。
 ;; 使用Cv“Windows PASTE Ctrl-v”是一个颠覆性的select。
 ;;  Cv =在我没有用的emacs中向上滚动。
 (全局设置密钥(kbd“Cv”)'删除区域)

 ;; 为了使Ck(kill-line)具有“Windows CUT”替代,可以这样做:
 (defun delete-line()“删除行,把它从kill ring中取出,把这个func绑定到Cz”
  (互动)
  (setq last-command'delete-line)
  (杀线)
  (setq kill-ring(cdr kill-ring))
  (setq kill-ring-yank-pointer kill-ring)
  (setq last-command'delete-line)
 )
 (全局设置密钥(kbd“Cz”)'删除行)
 ;; 没有设置最后的命令2+ C-zs搞乱杀戒

我对第一个问题的回答是:在emacs中标记文本(使用鼠标或设置标记C-SPC ),然后按键盘上的“< – Backspace”button而不是Cw 。 这样,你仍然可以粘贴在系统剪贴板中的文本,而不用担心剪贴板被Cw杀死的文本覆盖

这个答案的背景:有时当我在emacs以外的地方使用emacs来代替emacs中的区域时,我经常犯了一个错误,首先将该文本复制到系统剪贴板(即在Windows Ctrl + C ),然后做一个Cw在emacs中“删除”我想要replace的文本区域,希望以后的Mw可以从kill-ring中恢复剪贴板中的文本。 不幸的是剪贴板将被Cw杀死的文本覆盖,剪贴板中的原始信息将永远不会显示在杀戒中。

对于第二个问题,是的,你总是可以标记文本在emacs中,然后直接Cy

大多数杀戮函数使用kill-region去做文本的实际工作。 我使用lispmacros从kill函数创build删除函数。

 (defmacro jpk/delete-instead-of-kill (&rest body) "Replaces `kill-region' with `delete-region' in BODY." `(cl-letf (((symbol-function 'kill-region) (lambda (beg end &optional yank-handler) (delete-region beg end)))) ,@body)) (defun jpk/delete-word (arg) "Like `kill-word', but does not save to the `kill-ring'." (interactive "*p") (jpk/delete-instead-of-kill (kill-word arg))) 

这里是kill-region的一个版本,不强制杀死环中的值。

 (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 "Cw") 'kill-or-delete-region) 

这使您可以像以前一样执行Cw ,但Cu Cw现在删除文本而不更改杀手环。

如何删除文本没有杀戒?

delete-regionfunction将删除选定的区域,而不添加到杀戒

另外,是否有可能直接拉扯文本,而不是一些文本,甚至没有button来杀死它?

我想你是问如何用你已经放在杀死环上的东西来replace选定区域中的文本。

设置(delete-selection-mode 1)将允许您抽出/粘贴在选定的区域。 它也允许你input和replace选定的区域。

在OS X上的版本25.1.1还必须添加(setq select-enable-primary nil)以防止它将所选区域复制到杀戒