Emacs-如何将kill更改为delete?

Emacs-如何将kill更改为delete?,emacs,edit,Emacs,Edit,我只希望C-w和M-w修改压井环,以及系统的剪贴板[C-C(复制),C-x(剪切)] 我经常使用M-d和M-DEL,但我不想每次都猛拉然后在M-y之间循环 我在看,但它没有回答我的问题 示例:我想将M-d“kill word”绑定到“delete word”,但“delete word”不存在。我怎么做到的?任何帮助都将不胜感激。我想您应该使用删除区域而不是终止区域,这样文本就不会保存在终止环中,例如 (defun my-delete-word (start) (interactive "d

我只希望C-w和M-w修改压井环,以及系统的剪贴板[C-C(复制),C-x(剪切)]

我经常使用M-d和M-DEL,但我不想每次都猛拉然后在M-y之间循环

我在看,但它没有回答我的问题


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

我想您应该使用
删除区域
而不是
终止区域
,这样文本就不会保存在终止环中,例如

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

我制作了一个宏来将任何kill命令更改为delete命令

(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

(取消删除单词(arg)
“向前删除字符,直到遇到字尾。
在争论中,要多次这样做。”
(交互式“p”)
(如果(使用-region-p)
(删除区域(区域开始)(区域结束))
(删除区域(点)(progn(前向字arg)(点‘‘‘)’)
(取消向后删除字(arg)
“向后删除字符,直到遇到字尾。
在争论中,要多次这样做。”
(交互式“p”)
(删除字(-arg)))
(全局设置键(读取kbd宏“”)“向后删除字)

参见Emacs Wiki,第页。谁否决了这一点?这有什么不好?是因为修理我吗?我还能实现它吗?FIXME指的是
kill region
有3个参数,而
delete region
只有2个。额外的arg使
kill region
忽略args中指定的区域,而使用当前区域。我没有费心解释这一点,所以它不是一个完美的替代品。不过我从来没有遇到过麻烦。而且要明确的是,
区域
arg在
kill word
中没有使用,因此
delete而不是kill
将生成一个等效的
delete word
。好的。我确实实现了它,它工作得非常完美。我并不专业,但对我来说这似乎是一个优雅的解决方案。我还是不明白投票结果。
(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)