Gibt es eine Möglichkeit, möglicherweise mithilfe eines Pakets, alle Dateien (mit Pfaden) und Unterverzeichnisse (oder zumindest die leeren Unterverzeichnisse ) rekursiv aufzulisten, da die Pfade zu den nicht leeren Pfaden aus den Pfaden von ermittelt werden können? die darin enthaltenen Dateien) des aktuellen Verzeichnisses?
Am ehesten finde ich die projectile-find-file
Funktion des projectile
Pakets (alternativ die helm-projectile-find-file
Funktion des helm-projectile
Pakets), aber es scheint nicht in der Lage zu sein, leere Ordner aufzulisten. Darüber hinaus scheint es nur mit Git und anderen Versionskontroll-Repositorys zu funktionieren, aber möglicherweise gibt es eine Problemumgehung für diese Einschränkung.
helm
oder funktioniertivy
, dh dass die Ergebnisse in einemhelm
oderivy
Puffer angezeigt werden . Wenn es nicht möglich ist, beide Anforderungen zu erfüllen, ist die zweite für mich wichtiger.Antworten:
Vorausgesetzt, Sie verwenden
ivy
, können Sie diese Funktion verwendenquelle
helm
?helm
.ivy
ist ziemlich leicht. Probieren Sie es aus.Verzeichnis-Dateien-rekursiv
(Ich denke, das wurde in Emacs 25 hinzugefügt)
Hier ist der Link zum Handbuch: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html
Beispiel
quelle
include-directories
auf einzustellent
? Ich arbeite an Emacs 24 und kann dies momentan nicht ausprobieren, aber ich kann es in wenigen Stunden zu Hause testen.In dieser Antwort wird davon ausgegangen, dass Sie eine Liste der Datei- und Verzeichnisnamen anzeigen möchten , anstatt eine Lisp-Liste zu erhalten.
Verwendung Standard Emacs Befehle
find-dired
,find-name-dired
oderfind-grep-dired
. Die gefundenen Datei- und Verzeichnisnamen werden in einem Verzeichnismoduspuffer angezeigt. (Sie können die ganze Kraft von Dired einsetzen, um an den Ergebnissen zu arbeiten.)Wenn Sie eine Bibliothek verwenden
find-dired+.el
, haben Sie erweiterte Versionen dieser Standard-Emacs-Befehle. Plüsch, Sie haben einen Befehlfind-time-dired
, der Dateien findet, die neuer oder älter als ein bestimmter Zeitstempel sind.quelle
find-dired
ist genau das, wonach ich suche, aber gibt es eine Möglichkeit, nur Namen zu drucken? Weil ansonsten ein einziger Dateiname ohne Grund mehrere Zeilen braucht, da mir Größe, Datum oder Berechtigungen von Dateien absolut egal sind. Ich habe versucht , läuft(setcar find-ls-option "-printf '%p\n'")
vorfind-dired
, aber aus irgendeinem Grund auf diese Weise Dired nicht wollen , eine Datei öffnen beim Drücken Geben Sie ein Element über.(
drücken, um mehr als die Dateinamen ein- oder auszuschalten. Ich lasse es die meiste Zeit ausgeschaltet (es werden keine Details angezeigt) und schalte es nur kurz ein, wenn ich einige Details überprüfen möchte.Siehe https://github.com/technomancy/find-file-in-project
Es gibt Befehle zum Suchen von Dateien oder Verzeichnissen. Aber nicht beide.
Wenn Sie nur alle Unterverzeichnisse und Dateien rekursiv in einem Puffer auflisten möchten, gibt es in Emacs seit Ewigkeiten zwei Befehle:
M-x find-dired
. Es hängt vom CLI-Tool abfind
. Unter Windows müssen Sie Cygwin oder MYSYS installierenfind
M-x find-lisp-find-dired
. Gleich wiefind-dired
aber in Lisp geschrieben. Es besteht also keine Abhängigkeit von Dritten. Außerdem kann es das Gebietsschema sofort erkennen. Aber es ist langsamer alsfind-dired
quelle
ls
oder die Emacs-Funktion verwendetfind-file
. Beide listen sowohl Dateien als auch Verzeichnisse auf, einschließlich leerer Verzeichnisse.find-dired
undfind-lisp-find-dired
rekursiv, dass sie nicht nur den Inhalt des aktuellen Verzeichnisses auflisten, sondern auch die Inhalte von jedem seiner Unterverzeichnisse, Sub-Sub-Verzeichnisse, usw.?In dieser Antwort wird davon ausgegangen, dass Sie eine Lisp-Liste der Datei- und Verzeichnisnamen erhalten möchten , anstatt eine Liste von ihnen anzuzeigen.
Wenn Sie die Bibliothek Dired + verwenden , können Sie die Funktion verwenden
diredp-files-within
. (Sie müssen sich nicht in einem Dired-Puffer befinden, um ihn zu verwenden.)Dies funktioniert mit jeder Emacs-Version und ist allgemeiner als
directory-files-recursively
.Sie können eine Liste von Dateien und Verzeichnissen übergeben, die jeweils rekursiv ausgeführt werden.
Oder Sie können eine Funktion übergeben , die eine solche Liste zurückgibt.
Wenn es einen gerichteten Puffer für ein Verzeichnis gibt, das verarbeitet wird, wird die Funktion in diesem Puffer aufgerufen, um die Liste der einzuschließenden Dateien zurückzugeben.
Wenn die Funktion beispielsweise ist, werden
dired-get-marked-files
nur die markierten Dateien und Unterverzeichnisse einbezogen.Sie können ein Prädikat übergeben , dem jede Datei oder jedes Verzeichnis entsprechen muss. Regexp Matching ist natürlich eine Art von Prädikat.
Sie können ihm sagen, dass er symbolischen Links nicht folgen soll.
quelle
quelle