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

时间:2012-05-10 15:24:19

标签: emacs copy-paste org-mode

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

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

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

总结:我想要一种方法将打开文件列表导出到文本文件(或新缓冲区),而不需要其他数据;没有文件大小,模式或任何其他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"))

3 个答案:

答案 0 :(得分: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")))

答案 1 :(得分: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")))

答案 2 :(得分:1)

你当然应该可以从缓冲区列表中复制和抽取。

e.g。用 C-x h M-w 复制所有内容,然后进入新的缓冲区进行编辑。