Emacs:如何删除文本没有杀戒?
我想删除一些文本,以便我可以抽出一些其他的文本而不是它。 我怎样才能做到这一点? CW剪切选定的文本杀死戒指,我最终没有我想要的文本被抽出。
另外,是否有可能直接拉扯文本, 而不是一些文本,甚至没有button来杀死它?
我经常键入Mx delete-region
,但可以将其绑定到一个键。
使用新版本的Emacs中的删除select模式 ,您不必input命令就可以input:
默认情况下,即使标记处于活动状态,文本插入也会正常进行 – 例如,键入a将插入字符“a”,然后取消标记。 删除select模式(次要模式)会修改此行为:如果启用该模式,则在标记处于活动状态时插入文本将导致首先删除该区域中的文本。 另外,通常只删除一个字符的命令(如Cd或DEL )将删除整个区域。 要打开或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.el
“ kill-word
”来simple.el
。 我用delete-region
转换kill-region
用backward-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-region
function将删除选定的区域,而不添加到杀戒
另外,是否有可能直接拉扯文本,而不是一些文本,甚至没有button来杀死它?
我想你是问如何用你已经放在杀死环上的东西来replace选定区域中的文本。
设置(delete-selection-mode 1)
将允许您抽出/粘贴在选定的区域。 它也允许你input和replace选定的区域。
在OS X上的版本25.1.1还必须添加(setq select-enable-primary nil)
以防止它将所选区域复制到杀戒