我可以在 emacs 中创建新文件时创建不存在的目录吗?

Jim*_*ker 29 emacs

在 emacs 中,我通过使用 Cx Cf 访问它来创建一个文件。假设我想创建/home/myself/new_directory/file.txt.

如果 new_directory 尚不存在,有没有办法在创建过程中创建它而file.txt无需任何额外步骤?(我正在考虑在 Linux 中使用-p标志之类的东西mkdir。)

我觉得有一个不同的击键而不是 Cx Cf 可以做到这一点,但我不记得它是什么。

via*_*Zah 26

您还可以建议函数find-file透明地创建必要的目录。

(defadvice find-file (before make-directory-maybe (filename &optional wildcards) activate)
  "Create parent directory if not exists while visiting file."
  (unless (file-exists-p filename)
    (let ((dir (file-name-directory filename)))
      (unless (file-exists-p dir)
        (make-directory dir t)))))
Run Code Online (Sandbox Code Playgroud)

只需将它放在您的.emacs某个地方并C-x C-f照常使用即可。

  • 美妙的解决方案。我喜欢如何改进小东西可以打开一个全新的提示世界,让 emacs 做得更好(是的,我之前不知道 `defadvice`)。 (2认同)

Chr*_*sen 18

当我提供一个不存在的组件的路径名时,find-file(即Cx Cf),会给我一条额外的消息,说

使用 Mx make-directory RET RET 创建目录及其父目录

由于在您第一次保存缓冲区之前不会创建文件,因此您可以make-directory在新缓冲区出现后立即运行,也可以在需要保存文件之前的任何其他时间执行此操作。然后从需要目录的缓冲区中,键入Mx make-directory RET RET(它会提示创建目录(默认值来自缓冲区的路径名);第二个 RET 是接受默认值)。


via*_*Zah 14

伊多模式提供ido-find-file这是一个替代的find-file,给你更多的功能。例如,它允许您在打开文件的同时创建新目录。

  • 键入C-x C-f照常(其被重新映射到ido-find-file),

  • 提供不存在的路径,

  • M-m这将提示创建新目录,

  • 然后在新创建的目录中指定要访问的文件名。