我想使用普通模式命令,例如d
c
x
等,而不会将内容复制到剪贴板。
我想制作emacs,以便只有y
命令会将任何内容写入剪贴板。其他命令如d
应该只删除内容而不向剪贴板写入任何内容。
答案 0 :(得分:1)
这是朝着正确方向迈出的一步:
(evil-define-operator evil-change-into-null-register (beg end type register yank-handler)
"Change text from BEG to END with TYPE. Do not save it in any register."
(interactive "<R><x><y>")
(evil-change beg end type ?_ yank-handler))
(evil-define-operator evil-delete-into-null-register (beg end type register yank-handler)
"Delete text from BEG to END with TYPE. Do not save it in any register."
(interactive "<R><x><y>")
(evil-delete beg end type ?_ yank-handler))
(define-key evil-normal-state-map "c" 'evil-change-into-null-register)
(define-key evil-normal-state-map "d" 'evil-delete-into-null-register)
但是,C
,D
,s
,S
,x
,X
以及其他几个人也需要反弹,这对x
似乎无法正常工作(它仍然需要一个动议):
(evil-define-operator evil-delete-char-into-null-register (beg end type register yank-handler)
"Delete text from BEG to END with TYPE. Do not save it in any register."
(interactive "<R><x>")
(evil-delete-char beg end type ?_ yank-handler))
(define-key evil-normal-state-map "x" 'evil-delete-char-into-null-register)
您最好的选择是在evil-delete
附近添加around advice并始终将?_
注册表传递给我(抱歉,我现在没有时间这样做,但我想我和我#39;发布我所拥有的内容。
答案 1 :(得分:0)
这不容易实现,因为delete运算符调用了yank运算符。但是,您可以重新定义evil-delete
,只需删除对evil-yank
的调用。
答案 2 :(得分:0)
根据Gordon Gustafson的建议使用arround advice
。 evil-delete
是emacs用于各种删除的内容,因此删除黑洞寄存器可以解决问题。只需将以下内容添加到.emacs
(defun bb/evil-delete (orig-fn beg end &optional type _ &rest args)
(apply orig-fn beg end type ?_ args))
(advice-add 'evil-delete :around 'bb/evil-delete)