【发布时间】:2016-06-13 10:29:59
【问题描述】:
我想使用普通模式命令,例如 d c x 等,而不会将内容复制到剪贴板。
我想制作 emacs,以便只有 y 命令将任何内容写入剪贴板。 d 等其他命令应该只删除内容而不向剪贴板写入任何内容。
【问题讨论】:
我想使用普通模式命令,例如 d c x 等,而不会将内容复制到剪贴板。
我想制作 emacs,以便只有 y 命令将任何内容写入剪贴板。 d 等其他命令应该只删除内容而不向剪贴板写入任何内容。
【问题讨论】:
按照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)
【讨论】:
这是朝着正确方向迈出的一步:
(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 并始终将其传递给 ?_ 寄存器(抱歉,我现在没有时间这样做,但我想我会发布我所拥有的)。
【讨论】:
这并不容易,因为 delete 操作符调用 yank 操作符。但是,您可以重新定义 evil-delete 并简单地删除对 evil-yank 的调用。
【讨论】: