我只想删除一些文本,所以可以代替其他文本。我怎样才能做到这一点?Cw剪切选定的文本以杀死铃声,最终我没有想要拉的文本。
另外,是否可以直接拉动文本而不是直接拉动某些文本而无需按按钮将其杀死?
我只想删除一些文本,所以可以代替其他文本。我怎样才能做到这一点?Cw剪切选定的文本以杀死铃声,最终我没有想要拉的文本。
另外,是否可以直接拉动文本而不是直接拉动某些文本而无需按按钮将其杀死?
Answers:
我M-x delete-region
经常键入,但是您可以将其绑定到键上。
使用较新版本的Emacs中的Delete Selection Mode,您不必键入命令就可以开始键入:
默认情况下,即使标记处于活动状态,文本插入也正常发生-例如,键入a插入字符'a',然后停用该标记。删除选择模式(次要模式)会修改此行为:如果启用该模式,则在标记处于活动状态时插入文本会导致该区域中的文本首先被删除。同样,通常只删除一个字符的命令(例如C-d或DEL)将代替整个区域。要打开或关闭“删除选择”模式,请键入
M-x delete-selection-mode.
delete-region
键,因为Backspace现在可以这样做。Backspace删除选定的区域而不是将其杀死,换句话说,Backspace会删除选定的文本而不将其保存/推入kill环。这是因为该值delete-active-region
是t
,除非你把它定义为其他值。
您可以使用M-y
afterC-y
插入kill环中的上一个项目,也可以使用browser-kill-ring包。
至于第二个问题,请参阅DeleteSelectionMode。
我有同样的问题。到目前为止,我最接近的事情是只是创建一个本质上小的功能:
(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)))
MX eval-expression(setq kill-ring(cdr kill-ring))-从kill-ring中删除最后一个项目
对于第二个问题,除了DeleteSelectionMode之外,您还可以启用CUA模式,该模式还为您提供了由C-Return启用的不错的矩形选择模式。从22.1开始,CUA模式是emacs的一部分。
找到了答案。
首先在这里发布。
;; 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 "C-k") 'delete-line-no-kill)
大多数kill函数用于kill-region
完成杀死文本的实际工作。我使用lisp宏从kill函数创建删除函数。
(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)))
cl-letf
可以创建具有动态范围的函数的本地绑定。这意味着它仅对中的代码有效cl-letf
,但是它适用于整个调用树(例如,kill-region
它不直接出现在中body
,而是被kill-word
调用kill-region
所代替delete-region
)。
cl-letf
。 cl-letf
就像let*
在这个意义上。
这是我的实现和动机:
(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))))
我从中的“ kill-word
”改编了这里的代码simple.el
。我kill-region
与delete-region
和切换forward-word
了backward-word
。这样,它确实不会影响kill-ring
,与其他情况(在emacs之外,我注意到kill-ring
受影响)不同。
(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 "C-c c") 'copy-to-register-z)
(global-set-key (kbd "C-c v") 'replace-register-content-z)
如下所示,添加与删除区域和删除行键Cw和Ck等效的删除项。绑定到键Cv和Cz。
;; 对delete-region进行键绑定可提供良好的“ Windows CUT Ctrl-x等效项”。 ;; 选择哪种键绑定是很尴尬的选择。 ;; 使用Cv“ Windows PASTE Ctrl-v”是一种颠覆性的选择。 ;; Cv =在没有用的emacs中向上滚动。 (全局设置密钥(kbd“ Cv”)'删除区域) ;; 要获得Ck(杀伤线)的“ Windows CUT”替代方案,可以这样做: (defun delete-line()“删除行,将其从kill ring中删除。将此函数绑定到Cz” (互动) (setq最后一个命令的'删除行') (杀线) (setq kill-ring(cdr kill-ring)) (setq kill-ring-yank-pointer kill-ring) (setq最后一个命令的'删除行') ) (全局设置密钥(kbd“ Cz”)'删除行) ;; 没有设置最后一个命令2+ C-zs弄乱了kill-ring
我对第一个问题的回答:在emacs中标记文本(使用鼠标或设置标记C-SPC
),然后按键盘上的“ <-Backspace”按钮,而不是C-w
。这样,您仍然可以粘贴系统剪贴板中的文本,而不必担心剪贴板被被文本杀死的文本覆盖C-w
答案的背景:有时,当我要在emacs外部获取文本以替换emacs中的区域时,我经常会犯一个错误,首先将文本复制到系统剪贴板(即Windows上Ctrl + C
),然后C-w
在emacs中将其复制为“删除”我要替换的文本区域,希望以后M-w
可以从kill-ring恢复剪贴板中的文本。不幸的是,剪贴板将被杀死的文本简单地覆盖C-w
,并且剪贴板中的原始消息将永远不会显示在杀戮圈中。
对于第二个问题,是的,您始终可以先在emacs中标记文本,然后直接标记 C-y
这是一个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 "C-w") 'kill-or-delete-region)
这使您能够C-w
像以前一样进行操作,但是C-u C-w
现在可以删除文本而无需更改kill-ring。