如何在Emacs中同时保存多个(我选择的)缓冲区?

时间:2009-12-05 17:28:34

标签: emacs save

当我按C-x ssave-some-buffers)或C-x C-csave-buffers-kill-terminal)时,Emacs会逐个显示已修改缓冲区的名称,并询问如何对每个缓冲区执行操作(保存,差异,通过,...)。逐个按y是很慢的。按!不会让您看到正在保存的缓冲区。

如何首先显示所有修改过的缓冲区的名称,以便我可以标记其中一些并快速保存所有其他缓冲区?

6 个答案:

答案 0 :(得分:16)

C-x C-bM-x list-buffers)显示所有缓冲区的列表。修改后的内容旁边会显示*。您可以按s标记要保存的缓冲区。完成后,按x保存您标记的所有缓冲区。

不幸的是,据我所知,没有办法只显示未保存的缓冲区或对它们进行排序,因此它们都位于顶部。

(我实际上更喜欢M-x ibufferM-x list-buffers,但ibuffer提供了类似的功能。)

答案 1 :(得分:12)

在emacs 23中,使用ibuffer:

  • 'M-x ibuffer'(打开缓冲区列表)
  • '* u'(同时开始和你)标记所有未保存的缓冲区
  • 'S'保存所有标记的缓冲区

奇怪的是,*你没有标记'特殊'缓冲区,比如 scratch 编译等......我想我正在使用名称...

答案 2 :(得分:4)

使用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保存它们。

答案 3 :(得分:4)

标题中问题的答案是将参数传递给save-buffers-kill-emacs(或-kill-terminal),即。使用密钥组合C-u C-x C-c,它将静默保存所有缓冲区并退出(或C-u C-x s以静默方式保存所有缓冲区。)

答案 4 :(得分:2)

在emacs 23中

  • C-x C-bM-x list-buffers)查看缓冲区列表
  • m标记要保存的缓冲区
  • S保存标记的缓冲区
  • u可单独取消标记缓冲区,或M-x dired-unmark-all-marks取消所有
  • 标记

答案 5 :(得分:2)

我现在用Google搜索了这个问题并在此处找到了解决方案 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)))

保存并评估init.el文件的缓冲区(M-evalb-buffer),然后当你想要保存所有修改过的文件时,你只需按下Meta键和“*”,如第二个所示线

我希望这个解决方案有效!