emacs - 将当前缓冲区列表保存到文本文件中

dan*_*ast 9 emacs copy-paste org-mode

我经常需要获取当前打开文件的简单文本副本.原因通常是:

  • 我想把名单发给同事
  • 我想记录我正在处理的任何事情(通常在组织文件中)
  • 我想在shell上对我当前打开的一个文件进行操作.我需要复制粘贴路径名.

事实是通常buffer-menulist-buffers提供方便的菜单来导航打开的缓冲区,但是将打开的文件的名称复制粘贴到终端或执行上述任何操作是非常不方便的.例如:我不能双击一行来选择完整的路径名,我不能使用kill/ yankemacs序列来复制路径名.

简介:我想要一种方法将打开文件列表导出到文本文件(或新缓冲区),而不需要其他数据; 没有文件大小,模式或任何其他emacs元数据.

那是否有命令?我可以安装额外的包吗?

编辑

添加Trey Jackson的解决方案,经过修改后提供了一些反馈:

(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n"))
  (message "List of files copied to kill ring"))
Run Code Online (Sandbox Code Playgroud)

Tre*_*son 9

此命令将为您完成以下任务:

(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n")))
Run Code Online (Sandbox Code Playgroud)


ata*_*lor 6

您可以更改*Buffer List*缓冲区的模式.默认情况下,它将处于模式Buffer Menu,但将其更改为text-modefundamental-mode将删除所有特殊行为,允许您像常规缓冲区一样从中剪切和粘贴.可以轻松地删除元数据delete-rectangle.

或者,您可以使用elisp以编程方式访问缓冲区列表:

(dolist (buffer (buffer-list))
  (when (buffer-file-name buffer)
    (insert (buffer-file-name buffer) "\n")))
Run Code Online (Sandbox Code Playgroud)