Есть ли способ, возможно, с помощью пакета, чтобы рекурсивно перечислить все файлы (с путями) и подкаталоги (или, по крайней мере, пустые подкаталоги, так как пути к непустым можно почерпнуть из путей файлы, содержащиеся в нем) текущего каталога?
Самое близкое, что я мог найти, - это projectile-find-file
функция projectile
пакета (или helm-projectile-find-file
функция helm-projectile
пакета), но, похоже, он не в состоянии перечислить пустые папки. Кроме того, кажется, что он работает только с Git и другими репозиториями контроля версий, но для этого ограничения может быть обходной путь.
helm
либоivy
, т.е. результаты будут отображаться в буфереhelm
илиivy
. Если невозможно удовлетворить оба требования, для меня важнее второе.Ответы:
Предполагая, что вы используете,
ivy
вы можете использовать эту функциюисточник
helm
?helm
.ivy
довольно легкий. Дайте это выстрел.Каталог-файлы рекурсивно
(Я думаю, что это было добавлено в Emacs 25)
вот ссылка на руководство: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html
пример
источник
include-directories
вt
? Я нахожусь на Emacs 24 и не могу попробовать это прямо сейчас, но я могу проверить это дома через несколько часов.Этот ответ предполагает, что вы хотите отобразить список имен файлов и каталогов вместо получения списка их в Лиспе.
Используйте стандартный Emacs команды
find-dired
,find-name-dired
илиfind-grep-dired
. Найденные имена файлов и папок отображаются в буфере режима Dired. (Вы можете использовать всю мощь Dired для работы над результатами.)Если вы используете библиотеку,
find-dired+.el
то у вас есть расширенные версии этих стандартных команд Emacs, плюс у вас есть командаfind-time-dired
, которая находит файлы, которые новее или старше заданной отметки времени.источник
find-dired
это именно то, что я ищу, но есть ли способ печатать только имена? Потому что в противном случае одно имя файла занимает несколько строк без причины, так как мне абсолютно безразлично размер, дата или права доступа к файлам. Я пытался запустить(setcar find-ls-option "-printf '%p\n'")
доfind-dired
, но по какой-то причине этот путь устарел, не хотят открывать файл после нажатия Enter поверх элемента.(
чтобы включить / выключить отображение не только имен файлов. Я отключаю его большую часть времени (подробности не отображаются) и просто кратко включаю его, когда хочу проверить некоторые детали.См. Https://github.com/technomancy/find-file-in-project.
Есть команды, чтобы найти файл или найти каталоги. Но не оба.
Если вы просто хотите перечислить все подкаталоги и файлы рекурсивно в одном буфере, есть две команды, встроенные в Emacs целую вечность:
M-x find-dired
, Это зависит от инструмента CLIfind
. В Windows вам нужно установить Cygwin или MYSYS, который имеетfind
M-x find-lisp-find-dired
, То же, что иfind-dired
написано на Лиспе. Таким образом, нет никакой зависимости от третьей стороны. Кроме того, он может распознать локаль из коробки. Но это медленнее, чемfind-dired
источник
ls
или функцию Emacsfind-file
, в обоих из которых перечислены как файлы, так и каталоги, включая пустые каталоги.find-dired
иfind-lisp-find-dired
рекурсивных в том , что они перечисляют не только содержимое текущего каталога, но и содержание каждого из его подкаталогов, суб-суб-каталогов, и т.д.?В этом ответе предполагается, что вы хотите получить список Lisp для имен файлов и dir, а не отображать их список.
Если вы используете библиотеку Dired +, тогда вы можете использовать функцию
diredp-files-within
. (Вам не нужно быть в буфере Dired, чтобы использовать его.)Это работает с любой версией Emacs и является более общим, чем
directory-files-recursively
.Вы можете передать ему список файлов и директорий, и он действует рекурсивно в каждом из них.
Или вы можете передать ему функцию, которая возвращает такой список.
Если для каталога, который обрабатывается, существует буфер Dired , то в этом буфере вызывается функция, возвращающая список включаемых файлов.
Например, если функция включена, включаются
dired-get-marked-files
только отмеченные файлы и подкаталоги.Вы можете передать ему предикат, который должен удовлетворять каждый файл или каталог. Соответствие регулярному выражению, конечно, является одним из видов предикатов.
Вы можете сказать, что не следует переходить по символическим ссылкам.
источник
источник