【问题标题】:List buffers associated with files?列出与文件关联的缓冲区?
【发布时间】:2017-07-15 01:30:55
【问题描述】:

我对使用 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 的新手,我不知道如何访问列表、它们的属性,或者......嗯......任何东西。介意帮帮我吗?

【问题讨论】:

    标签: list emacs lisp elisp list-comprehension


    【解决方案1】:

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

    (cl-loop for buf in (buffer-list)
       if (buffer-file-name buf)
       collect buf)
    

    (cl-remove-if-not 'buffer-file-name (buffer-list))
    

    【讨论】:

      【解决方案2】:

      您可能还想恢复已删除的目录。任何类型的缓冲区都可以有自己的专用恢复(请参阅revert-buffer-function)。因此,您可能想要检查 buffer-file-namedired-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 锤子,但最好在遇到角落时修复它们。

      【讨论】:

        猜你喜欢
        • 2018-09-10
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多