В emacs я создаю файл, посещая его с помощью Cx Cf. Допустим, я хотел бы создать /home/myself/new_directory/file.txt
.
Если new_directory еще не существует, есть ли способ создать его во время создания file.txt
без каких-либо дополнительных шагов? (Я думаю о чем-то вроде использования -p
флага mkdir
в Linux.)
Я чувствую, что вместо Cx Cf можно нажать другую клавишу, но я не могу вспомнить, что это такое.
:!mkdir -p ~/new_dir/to/some/crazy/path
M-!
например.Ответы:
Вы также можете посоветовать функцию
find-file
прозрачного создания необходимых каталогов.Просто поместите это в свое
.emacs
место и используйте C-x C-fкак обычно.источник
defadvice
раньше).Когда я предоставляю путь с несуществующим компонентом
find-file
(например, Cx Cf ), я получаю дополнительное сообщение, которое говоритПоскольку файл не создается до тех пор, пока вы не сохраните буфер в первый раз, вы можете запустить его
make-directory
сразу после запуска нового буфера или сделать это в любое другое время, прежде чем вам нужно будет сохранить файл. Затем из буфера, который нуждается в каталоге, введите Mx make-directory RET RET (он предложит создать каталог (значение по умолчанию получено из пути буфера); второй RET должен принять значение по умолчанию).источник
Режим Ido предусматривает
ido-find-file
заменуfind-file
и предоставляет вам гораздо больше возможностей. Например, он позволяет вам создавать новый каталог, пока вы открываете файл.Введите C-x C-fкак обычно (который переназначается на
ido-find-file
),предоставить несуществующий путь,
Нажмите M-m который предложит создать новый каталог,
и затем укажите имя файла для посещения во вновь созданном каталоге.
источник
M-m
в какой-то момент, иC-x C-f
вообще, если это не создает все автоматически? Если будет предложено создать каталог,M-! mkdir
или Dired будет делать то же самое ...ido-find-file
автоматически создать каталог? Или, что еще лучше, спросите меня, хочу ли я его создать? Я попытался использовать совет в ответе Тёрока Габора, но я не мог понять, к какой функции его применять (поскольку ido не вызываетfind-file
напрямую.Мое решение приходит с бонусом: если вы убьете буфер, не сохранив его, Emacs предложит удалить те пустые каталоги, которые были созданы (но только если их не было до того, как вы вызвали
find-file
):Каноническая версия здесь .
источник
В дополнение к предложению @Chris для Mx make-directory вы можете написать короткую функцию elisp, которая будет выполнять find-file, а затем make-directory ... Вы можете попробовать это:
Это не красиво, и он вспыхивает «it MX make-directory ....», прежде чем сказать «Создание каталога ...», но если ничего другого, это должно дать вам начало.
источник
find-file
функцию вместо определения новой, чтобы другие функции, вызывающиеfind-file
напрямую, могли даже извлечь выгоду из измененного поведения.Если ваши каталоги уже существуют, он просто выдаст предупреждение.
Из (
C-h f make-directory RET
) руководства:источник