Как сохранить несколько буферов (по моему выбору) одновременно в Emacs?

Когда я нажимаю C-x s (save-some-buffers) или C-x C-c (save-buffers-kill-terminal), Emacs отображает имена модифицированных буферов один за другим и спрашивает, что делать с каждым (save, diff, pass,...). Нажатие y по очереди медленное. Нажатие ! не позволяет вам видеть, какие буферы сохраняются.

Как я могу сначала отобразить имена всех измененных буферов, чтобы я мог отметить некоторые из них и быстро сохранить все остальные?

Ответы

Ответ 1

C-x C-b (M-x list-buffers) отображает список всех буферов. Модифицированные будут показаны рядом с ними *. Вы можете отметить буфер для сохранения, нажав s. Когда вы закончите, нажмите x, чтобы сохранить все отмеченные буферы.

К сожалению, насколько я знаю, нет способа показать только несохраненные буферы или отсортировать их, чтобы они были наверху.

(Я действительно предпочитаю M-x ibuffer до M-x list-buffers, но ibuffer предоставляет аналогичную функцию.)

Ответ 2

В emacs 23 с ibuffer:

  • 'M-x ibuffer' (чтобы открыть список буферов)
  • '* u' (start и u в одно и то же время) отмечать все несохраненные буферы
  • 'S' для сохранения всех отмеченных буферов

Как ни странно, * u не помещает "специальные" буферы, такие как скрест, компиляция и т.д. Я полагаю, что regexps на имени...

Ответ 3

Используйте ibuffer, который должен поставляться со всеми поздними версиями emacsen. Поместите в файл .emacs следующее:

(autoload 'ibuffer "ibuffer" "" t)
(global-set-key (kbd "C-x C-b") 'ibuffer)


(defun my-ibuffer-load-hook ()
  "Hook for when ibuffer is loaded."

  (define-ibuffer-filter unsaved-file-buffers
   "Only show unsaved buffers backed by a real file."
 (:description "unsaved file buffers")
 (and (buffer-local-value 'buffer-file-name buf)
   (buffer-modified-p buf)))

  (define-key ibuffer-mode-map (kbd "/ *") 'ibuffer-filter-by-unsaved-file-buffers)
  )

;; (add-hook 'ibuffer-load-hook 'my-ibuffer-load-hook)

(eval-after-load 'ibuf-ext '(my-ibuffer-load-hook))

Затем используйте C-x C-b, чтобы открыть список ibuffer, и / *, чтобы показать только несохраненные буферы, поддерживаемые реальным файлом (поэтому вы не видите *scratch* в списке, например). Отметьте нужные буферы с помощью m, а затем сохраните их с помощью S.

Ответ 4

Ответ на вопрос в заголовке - передать аргумент save-buffers-kill-emacs (или -kill-terminal), т.е. используйте комбинацию клавиш C-u C-x C-c, которая будет молча сохранять все буферы и выходить (или C-u C-x s, чтобы просто молча сохранять все буферы).

Ответ 5

В emacs 23

  • C-x C-b (M-x list-buffers) для просмотра списка буфера
  • m для отметки буферов для сохранения
  • S для сохранения отмеченных буферов
  • u для отмены буферов отдельно или M-x dired-unmark-all-marks для всех

Ответ 6

У меня есть googled сейчас для этого вопроса и нашел решение здесь http://johntellsall.blogspot.com.es/2013/03/emacs-save-all-modified-buffers.html

Вы должны добавить этот конфиг в конфигурацию ~/.emacs.d/init.el emacs

(global-set-key 
 (kbd "M-*")
 (lambda ()
   (interactive)
   (save-some-buffers t)))

сохранить и eval буфер (M-evalb-buffer) файла init.el, а затем, когда вы хотите сохранить все измененные файлы, вам нужно нажать клавишу Meta с помощью "*", как указано во втором линия

Я надеюсь, что это решение будет работать!

Хуан