如何在 emacs 中进行反向选择?

How to do an invert selection in emacs?

我目前选择了一个文本区域。我想 kill/yank (或以任何其他方式格式化)除选定区域之外的整个缓冲区。有什么方法可以在 emacs 中进行反向选择并完成相同的操作吗?

  1. C-w kill-region中间的文字
  2. C-x h mark-whole-buffer 剩下的文字。
  3. 做你的事。
  4. C-y yank中间文字.
(defun my-copy-inverted-region-as-kill (beginning end)
  "Copy to the kill ring everything except the marked region."
  (interactive "r")
  (let ((srcbuf (current-buffer))
        (offset (point-min)))
    (with-temp-buffer
      (insert-buffer-substring srcbuf)
      (delete-region (- beginning offset) (- end offset))
      (copy-region-as-kill (point-min) (point-max)))))

不能存在不连续的区域。 但是,这会将相反的命令放在 C-c DEL

(global-set-key "\^C\^?"        ; help edit mail files, etc.
        (defun erase-buffer-except-region (beg end)
          "Erase the buffer except for the region."
          (interactive "r")
          (when (< end beg)
            (cl-rotatef beg end))
          (delete-region end (point-max))
          (delete-region (point-min) beg)))