Emacs - 如何将 kill 更改为删除?

Emacs - How to change kill to delete?

我只想C-wM-w修改kill-ring,连同系统的剪贴板[C-c (复制),C-x(剪切)。

我经常使用 M-dM-DEL,但我不想猛拉然后循环 M-y 每次.

我正在查看 the emacs manual,但它没有回答我的问题。

示例:我想绑定M-d "kill-word"到"delete-word",但是"delete-word"不存在。我该怎么做呢?任何帮助将不胜感激。

我想你想使用 delete-region 而不是 kill-region 这样文本就不会保存在 kill-ring 中,例如。类似于

的内容
(defun my-delete-word (start)
  (interactive "d")
  (backward-word)
  (delete-region (point) start))

我制作了一个宏来将任何终止命令更改为删除命令。

(defmacro delete-instead-of-kill (&rest body)
  "Replaces `kill-region' with `delete-region' in BODY."
  `(cl-letf (((symbol-function 'kill-region)
              (lambda (beg end &optional region)
                ;; FIXME: account for region arg
                (delete-region beg end))))
     ,@body))

(defun delete-word (&optional arg)
  "Like `kill-word', but deletes instead of killing."
  (interactive "p")
  (delete-instead-of-kill (kill-word arg)))

我使用类似的宏进行复制。

(defmacro copy-instead-of-kill (&rest body)
  "Replaces `kill-region' with `kill-ring-save' in BODY."
  `(cl-letf (((symbol-function 'kill-region)
              (lambda (beg end &optional region)
                (kill-ring-save beg end region)
                (setq this-command 'kill-region))))
     ,@body))

来自 EmacsWiki https://www.emacswiki.org/emacs/BackwardDeleteWord

(defun delete-word (arg)
  "Delete characters forward until encountering the end of a word.
With argument, do this that many times."
  (interactive "p")
  (if (use-region-p)
      (delete-region (region-beginning) (region-end))
    (delete-region (point) (progn (forward-word arg) (point)))))

(defun backward-delete-word (arg)
  "Delete characters backward until encountering the end of a word.
With argument, do this that many times."
  (interactive "p")
  (delete-word (- arg)))

(global-set-key (read-kbd-macro "<M-DEL>") 'backward-delete-word)