C-x s
(save-some-buffers
)或者 C-x C-c
(save-buffers-kill-terminal
)时,Emacs 会逐个显示修改过的缓冲区名称,并询问每个缓冲区要进行哪种操作(保存、查看差异、跳过等)。一个一个按下 y
很慢。按下 !
不让你看到正在保存哪些缓冲区。
如何让所有修改过的缓冲区名称先显示出来,以便我可以将其中一些标记并快速保存所有其他缓冲区?
C-x C-b
(M-x list-buffers
)会显示所有缓冲区的列表。修改过的缓冲区旁边会有一个*
。您可以通过按下s
来标记缓冲区以进行保存。完成后,按下x
以保存您标记的所有缓冲区。
不幸的是,据我所知,没有办法仅显示未保存的缓冲区或对它们进行排序以便它们都位于顶部。
(实际上,我更喜欢使用M-x ibuffer
而不是M-x list-buffers
,但是ibuffer
提供了类似的功能。)
在Emacs 23中,使用ibuffer:
奇怪的是,*u不能标记像scratch、compilation等“特殊”缓冲区。我想这是因为它们的名称被正则表达式过滤了...
*scratch*
等,它只是不会标记没有可保存的buffer-file-name
的“未保存”缓冲区。 - phils使用ibuffer
,它应该随着所有的最新版本的Emacs一起提供。将以下内容放入您的.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
保存它们。
标题中问题的答案是传递一个参数给save-buffers-kill-emacs(或-kill-terminal),即使用键盘组合C-u C-x C-c
,它会自动保存所有缓冲区并退出(或者使用C-u C-x s
只是自动保存所有缓冲区)。
我已经在谷歌上搜索了这个问题,并在这里找到了解决方案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)))
在emacs 23中
C-x C-b
(M-x list-buffers
) 查看缓冲列表m
标记需要保存的缓冲区S
保存已标记的缓冲区u
取消单个缓冲区的标记,或使用M-x dired-unmark-all-marks
取消所有标记