在恶意模式下更改dd命令以不写入剪贴板

时间:2016-06-13 10:30:00

标签: emacs clipboard evil-mode

我想使用普通模式命令,例如d c x等,而不会将内容复制到剪贴板。

我想制作emacs,以便只有y命令会将任何内容写入剪贴板。其他命令如d应该只删除内容而不向剪贴板写入任何内容。

3 个答案:

答案 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)

但是,CDsSxX以及其他几个人也需要反弹,这对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 adviceevil-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)