Открытие нового файла, родительский каталог которого еще не существует

9

Открывая новый файл, родительский каталог которого еще не существует, я открываю окно оболочки или буфер оболочки Emacs, а затем mkdirкаталог в нем. Я нахожу это громоздким. Есть ли более простой способ?

Тим
источник

Ответы:

16

Вам не нужно этого делать, если это ваш вопрос.

C-x C-f /some/new/directory/newfile.txt

Emacs печатает сообщение , чтобы сообщить , что каталог /some/new/directory/еще не существует: Use M-x make-directory RET RET to create the directory and its parents.

Вставьте текст в новый буфер для нового файла newfile.txt.

C-x C-s сохранить файл.

Emacs спросит вас, хотите ли вы создать недостающие промежуточные каталоги (например, new/directory/вы нажали y«да».

Не очень громоздко, ИМО. Пользовательский интерфейс должен запросить у вас подтверждение, потому что вы могли легко напечатать имя существующего каталога.

Нарисовалась
источник
Вы также можете просто использовать M-x make-dir tab(проверено, emacs -Qчтобы убедиться, что работает), RET RETи он будет создавать каталог без каких-либо дополнительных запросов.
Джонатан Лич-Пепин
1
@ JonathanLeech-Pepin: Да, конечно. (Это то, что говорится в сообщении.) Но если вы уже открыли новый файловый буфер, просто попытайтесь сохранить его и подтвердите создание директории с помощью y.
Дрю
7

Для idoпользователей

  • Сделайте C-x C-f(что должно вызвать ido-find-file) и введите несуществующий путь.
  • Нажмите M-m(мнемоника make new dir?). Хит RET.
  • Продолжайте вводить новое имя файла, который вы хотите создать в этом новом каталоге. Хит RET.
Каушал Моди
источник
1

В этой ситуации emacs должен был сказать вам что-то вроде:

use M-x make-directory RET RET to create the directory and its parents

Это громоздко?

Я скажу, да, это так.

Нсуками _
источник
0

Если вы действительно хотите find-fileавтоматически создавать родительские каталоги, когда их еще нет, вы можете сделать следующее в вашем файле инициализации.

(defun my-find-file (orig-fun &rest args)
  (let* ((filename (car args))
         (directory (file-name-directory filename)))
    (if (not (file-directory-p directory))
        (make-directory directory t))
    (apply orig-fun args)))

(advice-add 'find-file :around 'my-find-file)

В конце концов, Emacs был разработан, чтобы быть расширяемым и настраиваемым.

Ссылка:

Лэй Чжао
источник