Apakah ada cara, mungkin menggunakan paket, untuk secara rekursif mendaftarkan semua file (dengan path) dan sub-direktori (atau setidaknya sub-direktori kosong , karena path ke yang non-kosong dapat diperoleh dari jalur file yang terkandung di dalamnya) dari direktori saat ini?
Yang paling dekat yang bisa saya temukan adalah projectile-find-file
fungsi dari projectile
paket (sebagai alternatif, helm-projectile-find-file
fungsi dari helm-projectile
paket), tetapi sepertinya tidak dapat membuat daftar folder kosong. Selain itu, tampaknya hanya berfungsi dengan Git dan repositori kontrol versi lain, tetapi mungkin ada solusi untuk batasan ini.
helm
atauivy
, yaitu bahwa hasilnya akan ditampilkan di dalamhelm
atauivy
buffer. Jika tidak mungkin untuk memenuhi kedua persyaratan, yang ke-2 lebih penting bagi saya.Jawaban:
Dengan asumsi Anda menggunakan
ivy
Anda dapat menggunakan fungsi inisumber
helm
?helm
.ivy
cukup ringan. Cobalah.direktori-file-secara rekursif
(Saya pikir ini ditambahkan dalam Emacs 25)
inilah tautan ke manual: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html
Contoh
sumber
include-directories
ket
? Saya sedang bekerja di Emacs 24, dan tidak dapat mencoba ini sekarang, tetapi saya dapat menguji ini di rumah dalam beberapa jam.Jawaban ini mengasumsikan bahwa Anda ingin menampilkan daftar file dan nama dir, alih-alih mendapatkan daftar Lisp dari mereka.
Gunakan standar Emacs perintah
find-dired
,find-name-dired
ataufind-grep-dired
. File dan nama dir yang ditemukan ditampilkan dalam buffer mode Dired. (Anda dapat menggunakan semua kekuatan Dired untuk mengerjakan hasilnya.)Jika Anda menggunakan pustaka
find-dired+.el
maka Anda memiliki versi yang disempurnakan dari perintah standar Emacs itu, lebih baik Anda memiliki perintahfind-time-dired
, yang menemukan file yang lebih baru atau lebih tua dari cap waktu yang diberikan.sumber
find-dired
persis apa yang saya cari, tetapi apakah ada cara untuk mencetak hanya nama? Karena kalau tidak satu nama file mengambil banyak baris tanpa alasan karena saya sama sekali tidak peduli dengan ukuran, tanggal, atau izin file. Saya sudah mencoba menjalankan(setcar find-ls-option "-printf '%p\n'")
sebelumnyafind-dired
, tetapi untuk beberapa alasan cara ini dired tidak ingin membuka file setelah menekan Enter pada item.(
untuk beralih menampilkan lebih dari nama file on / off. Saya mematikannya sebagian besar waktu (tidak ada detail yang ditampilkan), dan hanya mengaktifkannya sebentar ketika saya ingin memeriksa beberapa detail.Lihat https://github.com/technomancy/find-file-in-project
Ada perintah untuk mencari file atau mencari direktori. Tapi tidak keduanya.
Jika Anda hanya ingin membuat daftar semua sub-direktori dan file secara rekursif dalam satu buffer, ada dua perintah yang dibangun di Emacs untuk usia:
M-x find-dired
. Itu tergantung pada alat CLIfind
. Di Windows, Anda perlu menginstal Cygwin atau MYSYS yang telahfind
M-x find-lisp-find-dired
. Sama sepertifind-dired
tetapi ditulis dalam Lisp. Jadi tidak ada ketergantungan pihak ketiga. Selain itu, dapat mengenali lokal di luar kotak. Tapi lebih lambat dari itufind-dired
sumber
ls
, atau fungsi Emacsfind-file
, yang keduanya mencantumkan file dan direktori, termasuk direktori kosong.find-dired
dan bersifatfind-lisp-find-dired
rekursif karena mereka mencantumkan tidak hanya isi direktori saat ini, tetapi juga isi dari masing-masing sub-direktori, sub-sub-direktori, dll?Jawaban ini mengasumsikan bahwa Anda ingin mendapatkan daftar file Lisp dan nama dir, alih-alih menampilkan daftar mereka.
Jika Anda menggunakan library Dired + maka Anda dapat menggunakan fungsi
diredp-files-within
. (Anda tidak perlu berada dalam buffer Dired untuk menggunakannya.)Ini berfungsi dengan versi Emacs apa pun, dan ini lebih umum daripada
directory-files-recursively
.Anda dapat memberikan daftar file dan direktori, dan itu bertindak secara rekursif di masing-masing.
Atau Anda dapat melewatinya fungsi yang mengembalikan daftar tersebut.
Jika ada buffer Dired untuk direktori yang diproses maka fungsi dipanggil dalam buffer itu untuk mengembalikan daftar file yang akan disertakan.
Misalnya, jika fungsinya
dired-get-marked-files
maka hanya file dan subdirektori yang ditandai yang disertakan.Anda dapat memberikannya predikat yang harus dipenuhi oleh setiap file atau direktori. Pencocokan Regexp tentu saja merupakan salah satu jenis predikat.
Anda dapat mengatakan itu untuk tidak mengikuti tautan simbolik.
sumber
sumber