我有一长串文件(完整路径名,一个单独的行,在文本文件中一个),我想将所有这些文件打开到emacs缓冲区中,以便随后可以使用多次出现-in-matching-buffers在这些文件中浏览。
如何从emacs中打开文件列表?列出的文件位于任意文件夹中,并且具有任意文件名。即,路径和名称没有正则模式,因此我没有在寻找特定的正则表达式来匹配下面的示例。
我不想在emacs命令行调用中执行此操作,因为我通过单击图标在Windows上运行emacs,而且我想保持打开我已经打开的其他缓冲区(文件)。
我能够创建一个自定义的elisp函数(该函数中文件名列表的硬编码),如下所示(简短示例)。
(defun open-my-files ()
"Open my files"
(interactive)
(find-file "c:/files/file1.txt")
(find-file "c:/more_files/deeper/log.log")
(find-file "c:/one_last_note.ini")
)
我可以将elisp放在缓冲区中,然后全部选择,然后在eval-region中执行,然后使用M-x open-my-files执行该功能。
但是,如果elisp从包含列表的文本文件中读取文件列表,对我来说将更有生产力。
答案 0 :(得分:0)
这似乎可以在我的机器上正常工作
(defun open-a-bunch-of-files (filelist)
(with-temp-buffer
(insert-file-contents filelist)
(goto-char (point-min))
(let ((done nil))
(while (not done)
(if (re-search-forward "^\\([a-z_A-Z:\/.0-9]+\\)$" nil t nil)
(find-file-noselect (match-string 1))
(setf done t))))))
(open-a-bunch-of-files "./filelist.txt")
尽管如此,您可能仍需要使用正则表达式(在Unix文件系统上测试)。以及它的emacs,所以有人可能会指出一种更好的方法。加载的缓冲区不会被故意设置为当前缓冲区。
答案 1 :(得分:0)
我得出以下解决方案。与詹姆斯·安德森(James Anderson)提出的答案类似,但是用“事后研究”代替了重新研究,并基于其他一些参考文献进行了一些其他更改。
(defun open-a-bunch-of-files ()
"Open a a bunch of files, given a text file containing a list of file names"
(interactive)
(setq my_filelist (completing-read "my_filelist: " nil nil nil))
(with-temp-buffer
(insert-file-contents my_filelist)
(goto-char (point-min))
(while (not (eobp))
(find-file-noselect (replace-regexp-in-string "\n$" "" (thing-at-point 'line t)))
(forward-line)
)
)
)
参考文献: