2015-03-11 6 views
1

В настоящее время у меня есть область текста. Я хочу убить/yank (или форматировать любым другим способом) весь буфер, кроме выбранного региона. Есть ли способ, которым я могу сделать инвертированный выбор в emacs и выполнить то же самое?
Любая помощь будет оценена по достоинству. Благодарю.Как сделать инвертированный выбор в emacs?

ответ

1
  1. С-шkill-region текст в середине.
  2. C-x hmark-whole-buffer остальная часть текста.
  3. сделайте пожалуйста.
  4. C-yyank средний текст.
+0

Но когда остальная часть текста погибает, например, тогда бы не 'убить ring' быть затронуты? Тогда шаг 4 может не дать желаемого результата. –

+0

Тогда просто используйте 'M-y'. Это кольцо, которое может поместиться гораздо больше, чем одно убийство. –

1
(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)))))