如何在 emacs 中进行反向选择?
How to do an invert selection in emacs?
我目前选择了一个文本区域。我想 kill/yank (或以任何其他方式格式化)除选定区域之外的整个缓冲区。有什么方法可以在 emacs 中进行反向选择并完成相同的操作吗?
- C-w
kill-region
中间的文字
- C-x h
mark-whole-buffer
剩下的文字。
- 做你的事。
- 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)))
我目前选择了一个文本区域。我想 kill/yank (或以任何其他方式格式化)除选定区域之外的整个缓冲区。有什么方法可以在 emacs 中进行反向选择并完成相同的操作吗?
- C-w
kill-region
中间的文字 - C-x h
mark-whole-buffer
剩下的文字。 - 做你的事。
- 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)))