【问题标题】:How to kill all buffers with buffer file in a certain location?如何在某个位置使用缓冲区文件杀死所有缓冲区?
【发布时间】:2015-09-28 11:37:05
【问题描述】:

如何用缓冲区文件在某个位置杀死所有缓冲区?

例如,我想杀死 c:...\dev 中带有缓冲区文件的所有缓冲区以及 c:...\dev 中的所有 dired 缓冲区子目录

或者换句话说,如何遍历emacs中所有缓冲区的文件或目录?

感谢@David @phils。我在ibuffer中结合了elisp代码和函数

(mapc (lambda (buffer)
    (let ((file-name
           (or (buffer-file-name buffer)
               (with-current-buffer buffer
                 (and
                  (boundp 'dired-directory)
                  (stringp dired-directory)
                  dired-directory))
               )))
      (when (and file-name
                 (string-match "^c:.*?\\\\dev" file-name))
        (kill-buffer buffer))))
  (buffer-list))

【问题讨论】:

  • 如果是偶尔需要,我会使用ibuffer 来标记所有具有匹配模式的文件路径的缓冲区,然后杀死标记的缓冲区。
  • 它有效。但我想定期做。

标签: emacs elisp


【解决方案1】:

来自 elisp 使用:

(mapc (lambda (buffer)
        (let ((file-name
               (or (buffer-file-name buffer)
                   ;; In dired-mode we need `dired-directory' which
                   ;; might be a list and may not be fully expanded.
                   (with-current-buffer buffer
                     (and (eq major-mode 'dired-mode)
                          (expand-file-name
                           (if (consp dired-directory)
                               (car dired-directory)
                             dired-directory)))))))
          (when (and file-name
                     (string-match "^c:\\\\.*\\\\dev" file-name))
            (kill-buffer buffer))))
      (buffer-list))

【讨论】:

  • 我想你也想将file-name 作为参数传递给string-match,不是吗?
  • 无法通过缓冲区文件名评估的dired缓冲区怎么样?
  • 似乎没有设置buffer-file-name。你需要dired-directory,我更新了截断的代码。现在可能是使用defun 的时候了,但这留作练习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多