如何让Emacs在保存文件时创建中间目录?

18

有没有办法在Emacs中创建文件夹树 - 类似于

mkdir -p

在Bash中,我希望Emacs在保存文件时,如果所在目录不存在,则自动创建所有必要的中间目录。


如何在Emacs中创建一个目录?使用命令M-x make-directory,然后输入要创建的目录完整路径并按Enter键即可。 - Fredrik Pihl
我重新修改了这个问题。 - Adobe
3个回答

28

make-directory函数可以帮你实现这个功能。你的具体问题可能可以像这样解决:

(add-hook 'before-save-hook
          (lambda ()
            (when buffer-file-name
              (let ((dir (file-name-directory buffer-file-name)))
                (when (and (not (file-exists-p dir))
                           (y-or-n-p (format "Directory %s does not exist. Create it?" dir)))
                  (make-directory dir t))))))

2
在保存时提示创建新目录是一个好主意,而不是默认创建。 - aartist
3
艺术家:将(make-directory dir t)替换为(when (y-or-n-p (format "是否创建目录?:%s " dir)) (make-directory dir t)) - phils
@Adobe 对我来说似乎是有效的。您能详细描述一下您的问题吗? - Victor Deryagin
1
当我将现有文件保存在不存在的目录中时,一切都正常。但是当我保存一个不对应任何现有缓冲区的缓冲区时,Emacs会显示“没有这样的目录”。 - Adobe
1
我的意思是 - 当我保存一个不对应任何现有文件的缓冲区时 - Emacs 会显示:没有这样的目录。 - Adobe
2
@Adobe 哦,我明白了。问题在于函数 basic-save-buffer 在运行挂钩之前就发出错误信号。不确定如何正确处理这种情况。我建议使用函数 write-file(默认绑定到 C-x C-w)来保存这样的缓冲区 - 一切都会正常工作。 - Victor Deryagin

3
您也可以在emacs中使用M-!执行mkdir -p来获取一个shell命令提示符,然后您只需将目录结构放入其中:M-! dir1/dir2/dir3/dir4.....

我该如何让它工作?我输入 M-!,然后我的 minibuffer 提示我输入 Shell command:,但是我的命令都无法被接受。例如,输入 pwdls,我会收到类似于 pwd 不是内部或外部命令,也不是可运行的程序或批处理文件。 的消息。你能详细解释一下吗?(我对 Emacs 有点新手) - modulitos

2

(make-directory DIR &optional PARENTS)

创建目录DIR和任何不存在的父目录。 如果DIR作为目录已经存在,则会发出错误信号,除非设置了PARENTS参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接