Я могу создать каталоги, которые не существуют при создании нового файла в emacs?

В emacs я создаю файл путем посещения его с C-x C-f. Скажем, я хотел бы создать /home/myself/new_directory/file.txt.

Если new_directory еще не существует, есть ли способ иметь его, создаются во время создания file.txt без каких-либо дополнительных шагов? (Я думаю о чем-то как использование -p флаг к mkdir в Linux.)

Я чувствую, что существует другое нажатие клавиши вместо C-x C-f, который может сделать это, но я не могу помнить, каково это.

29
задан 28.07.2014, 00:03

4 ответа

Можно также советовать функции 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)))))

Просто вставьте это Ваш .emacs где-нибудь и использование C-x C-f, как обычно.

25
ответ дан 07.12.2019, 09:19

Когда я предоставляю путь несуществующий компонент, find-file (т.е. C-x C-f), дает мне дополнительное сообщение, в котором говорится

Используйте делать-каталог M-x RET RET для создания каталога и его родителей

Так как файл не создается, пока Вы сначала не сохраняете буфер, можно или работать make-directory прямо после того, как Ваш новый буфер подходит, или можно сделать это любое другое время, прежде чем необходимо будет сохранить файл. Затем от буфера, которому нужен каталог, введите делать-каталог M-x RET RET (это запросит каталог для создания (значение по умолчанию получено из пути буфера); второе RET должно принять значение по умолчанию).

18
ответ дан 07.12.2019, 09:19

Режим идо обеспечивает ido-find-file это - замена find-file и дает Вам намного больше функций. Например, это позволяет Вам создавать новый каталог между тем, Вы открываете файл.

  • Введите C-x C-f, как обычно (который повторно отображается на ido-find-file),

  • обеспечьте несуществующий путь,

  • нажмите M-m, который запросит новый каталог для создания,

  • и затем укажите имя файла для посещения в недавно созданном каталоге.

14
ответ дан 07.12.2019, 09:19

В дополнение к @Chris' предложению делать-каталога M-x можно записать короткую функцию elisp, которая сделает находить-файл и затем делать-каталог... Можно попробовать это:

(defun bp-find-file(filename &optional wildcards)
  "finds a file, and then creates the folder if it doesn't exist"

  (interactive (find-file-read-args "Find file: " nil))
  (let ((value (find-file-noselect filename nil nil wildcards)))
    (if (listp value)
    (mapcar 'switch-to-buffer (nreverse value))
      (switch-to-buffer value)))
  (when (not (file-exists-p default-directory))
       (message (format "Creating  %s" default-directory))
       (make-directory default-directory t))
  )

Это не симпатично, и это высвечивает "на нем делать-каталог M-X...." перед тем, чтобы говорить "Каталог Creating...", но если ничто иное, это должно дать Вам запуск.

0
ответ дан 07.12.2019, 09:19

Теги

Похожие вопросы