列出与文件关联的缓冲区?

pip*_*117 2 lisp emacs elisp list-comprehension list

我对使用 lisp 很陌生,所以如果这是一个微不足道的问题,我很抱歉。经过一段时间的谷歌搜索后,我无法找到解决方案,尽管我确信这是我的错。

所以。我正在尝试编写一个命令来恢复所有打开的缓冲区。简单的。我只是做

(setq revert-without-query (buffer-list))
(mapc 'revert-buffer (buffer-list))` 
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果存在任何与文件无关的缓冲区,这最终会失败——也就是说,总是如此。

对列表缓冲区进行C-x C-b打印类似

CRM   Buffer        Size  Mode            File
      init.el       300   Emacs-lisp      ~/.spacemacs.d/init.el
      %scratch%      30   Test            
Run Code Online (Sandbox Code Playgroud)

好的。很容易。如果我被允许混合 lisp 和 python,我会做类似的事情

(setq revert-without-query [b for b in buffer-list if b.File != ""])
;; Or would I test for nil? Decisions, decisions...
Run Code Online (Sandbox Code Playgroud)

经过一番挖掘,我发现存在remove-if。不幸的是,作为 lisp 的新手,我不知道如何访问列表、它们的属性,或者……嗯……任何东西。介意帮我一下吗?

pic*_*ick 5

一种可能性是检查buffer-file-name如果缓冲区没有访问文件,则返回 nil,例如。

(cl-loop for buf in (buffer-list)
   if (buffer-file-name buf)
   collect buf)
Run Code Online (Sandbox Code Playgroud)

或者

(cl-remove-if-not 'buffer-file-name (buffer-list))
Run Code Online (Sandbox Code Playgroud)