W emacsie tworzę plik, odwiedzając go za pomocą Cx Cf. Powiedzmy, że chciałbym stworzyć /home/myself/new_directory/file.txt
.
Jeśli new_directory jeszcze nie istnieje, czy istnieje sposób, aby utworzyć go podczas tworzenia file.txt
bez dodatkowych kroków? (Myślę o czymś takim, jak użycie -p
flagi mkdir
w systemie Linux).
Wydaje mi się, że istnieje inna kombinacja klawiszy zamiast Cx Cf, która może to zrobić, ale nie pamiętam, co to jest.
:!mkdir -p ~/new_dir/to/some/crazy/path
M-!
.Odpowiedzi:
Możesz także doradzić funkcji
find-file
przejrzyste tworzenie niezbędnych katalogów.Po prostu włóż to
.emacs
gdzieś i używaj C-x C-fjak zwykle.źródło
defadvice
).Gdy podam nazwę ścieżki z nieistniejącym składnikiem
find-file
(np. Cx Cf ), wyświetla mi dodatkowy komunikatPonieważ plik nie jest tworzony do momentu pierwszego zapisania bufora, możesz albo uruchomić
make-directory
zaraz po uruchomieniu nowego bufora, albo możesz to zrobić w dowolnym momencie przed zapisaniem pliku. Następnie z bufora, który potrzebuje katalogu, wpisz Mx make-directory RET RET (wyświetli monit o utworzenie katalogu (domyślnie pochodzi z nazwy ścieżki bufora); drugi RET ma zaakceptować domyślny).źródło
Ido tryb zapewnia
ido-find-file
, że jest wymianafind-file
i daje o wiele więcej możliwości. Na przykład umożliwia utworzenie nowego katalogu w międzyczasie podczas otwierania pliku.Wpisz C-x C-fjak zwykle (który jest odwzorowany
ido-find-file
),podać nieistniejącą ścieżkę,
naciśnij, M-mktóry poprosi o utworzenie nowego katalogu,
a następnie określ nazwę pliku do odwiedzenia w nowo utworzonym katalogu.
źródło
M-m
po coC-x C-f
w ogóle naciskać , a jeśli w ogóle nie tworzy wszystkiego automatycznie? Jeśli zostanie wyświetlony monit o utworzenie kataloguM-! mkdir
lub dired również wykona dobrą robotę…ido-find-file
automatyczne utworzenie katalogu? A nawet lepiej, zapytaj mnie, czy chcę to stworzyć? Próbowałem skorzystać z porady zawartej w odpowiedzi Töröka Gábora, ale nie mogłem dowiedzieć się, do której funkcji ją zastosować (ponieważ ido nie dzwonifind-file
bezpośrednio.Moje rozwiązanie ma dodatkową zaletę: jeśli zabijesz bufor bez zapisywania go, Emacs zaoferuje usunięcie tych pustych katalogów, które zostały utworzone (ale tylko jeśli nie istniały przed wywołaniem
find-file
):Wersja kanoniczna tutaj .
źródło
Oprócz sugestii @Chris dotyczącej tworzenia katalogu Mx, możesz napisać krótką funkcję elisp, która wykona wyszukiwanie pliku, a następnie utworzenie katalogu ... Możesz spróbować:
To nie jest ładne i miga „it MX make-directory ....” zanim powie „Creating directory ...”, ale jeśli nic więcej, powinno dać ci początek.
źródło
find-file
funkcję zamiast definiować nową, aby inne funkcje wywołującefind-file
bezpośrednio mogły nawet skorzystać ze zmodyfikowanego zachowania.Jeśli twoje katalogi już istnieją, po prostu wygeneruje ostrzeżenie.
Z (
C-h f make-directory RET
) instrukcji:źródło