我对使用lisp非常陌生,所以如果这是一个微不足道的问题,我很抱歉。经过一段时间的谷歌搜索后,我还没能找到解决方案,但我确信这是我的错。
因此。我试图编写一个命令,它将恢复所有打开的缓冲区。简单。我只是做
(setq revert-without-query (buffer-list))
(mapc 'revert-buffer (buffer-list))`
不幸的是,如果有任何与文件无关的缓冲区,也就是说,总是会失败。
对列表缓冲区执行C-x C-b
打印类似
CRM Buffer Size Mode File
init.el 300 Emacs-lisp ~/.spacemacs.d/init.el
%scratch% 30 Test
确定。很容易。如果我被允许混合使用lisp和python,我会做类似
的事情(setq revert-without-query [b for b in buffer-list if b.File != ""])
;; Or would I test for nil? Decisions, decisions...
经过一番挖掘,我发现存在remove-if
。不幸的是,作为lisp的新手,我不知道如何访问列表,他们的属性,或者......好吧......什么。介意帮助我?
答案 0 :(得分:4)
一种可能性是检查1.6.0
,如果缓冲区没有访问文件,则返回nil,例如
buffer-file-name
或
(cl-loop for buf in (buffer-list)
if (buffer-file-name buf)
collect buf)
答案 1 :(得分:1)
您可能还希望还原dired目录。任何类型的缓冲区都可以有自己的专用恢复(参见revert-buffer-function
)。因此,您可能希望检查buffer-file-name
和dired-directory
是否为非零。
(dolist (b (buffer-list))
(when (buffer-live-p b)
(with-current-buffer b
(when (or buffer-file-name dired-directory)
(revert-buffer 'ignore-auto 'noconfirm)))))
你也可以使用ignore-errors
锤子,但是在你遇到角落的情况下,你可能会更好地修复角落的情况。