Otwieranie nowego pliku, którego katalog macierzysty jeszcze nie istnieje

9

Podczas otwierania nowego pliku, którego katalog nadrzędny jeszcze nie istnieje, albo otwieram okno powłoki, albo bufor powłoki Emacsa, a następnie mkdirkatalog w nim. Uważam to za kłopotliwe. Czy istnieje prostszy sposób?

Tim
źródło

Odpowiedzi:

16

Nie musisz tego robić, jeśli to twoje pytanie.

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

Emacs wypisuje komunikat, aby poinformować, że katalog /some/new/directory/jeszcze nie istnieje: Use M-x make-directory RET RET to create the directory and its parents.

Wstaw tekst do nowego bufora dla nowego pliku newfile.txt.

C-x C-s aby zapisać plik.

Emacs pyta cię, czy chcesz utworzyć brakujące katalogi pośrednie (np new/directory/. Trafiłeś yw „tak”.

Niezbyt uciążliwe, IMO. Interfejs użytkownika musi poprosić o potwierdzenie, ponieważ łatwo mogłeś pomylić nazwę istniejącego katalogu.

Rysował
źródło
Możesz też po prostu użyć M-x make-dir tab(przetestowano z, emacs -Qaby upewnić się, że działa), RET RETa utworzy katalog bez dalszych monitów.
Jonathan Leech-Pepin
1
@ JonathanLeech-Pepin: Tak, oczywiście. (Tak mówi komunikat.) Ale jeśli już otworzyłeś nowy bufor plików, po prostu spróbuj go zapisać i potwierdź utworzenie katalogu y.
Drew
7

Dla idoużytkowników

  • Wykonaj C-x C-f(co powinno zostać wywołane ido-find-file) i wprowadź nieistniejącą ścieżkę.
  • Naciśnij M-m(mnemonik dla mnowego katalogu?). Hit RET.
  • Kontynuuj wpisywanie nowej nazwy pliku, którą chcesz utworzyć w nowym katalogu. Hit RET.
Kaushal Modi
źródło
1

W tej sytuacji emacs powinien był powiedzieć ci coś takiego:

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

Czy to jest uciążliwe?

Powiem tak, tak jest.

Nsukami _
źródło
0

Jeśli naprawdę chcesz, aby find-fileautomatycznie tworzyć katalogi nadrzędne, gdy jeszcze nie istnieje, możesz wykonać następujące czynności w pliku init.

(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)

W końcu Emacs został zaprojektowany tak, aby był rozszerzalny i konfigurowalny.

Odniesienie:

Lei Zhao
źródło