Markieren von Dateien im Verzeichnis mit Unterverzeichnissen

7

Ich versuche, eine Reihe von Dateien (einschließlich der Dateien der Unterverzeichnisse) im Verzeichnis zu markieren, die mit einem regulären Ausdruck übereinstimmen.

C-U C-x d -alR RET e:/ RET

Gefolgt von %mund geben Sie meine Regex. Keine Treffer.

Wenn ich jedoch denselben regulären Ausdruck in einem "normalen" Verzeichnis (dh ohne -R-Schalter) eingebe, stimmt der reguläre Ausdruck überein.

Mache ich etwas falsch? Ich habe es mit versucht emacs -Qund das gleiche Ergebnis erzielt.

bearbeiten:

Es scheint, dass der tatsächliche reguläre Ausdruck signifikant ist; Die Eingabe \.mp3$funktioniert wie erwartet, aber wenn ich versuche, den regulären Ausdruck mit ^musicMarkierungen zu verankern, wird alles unter dem e:/musicOrdner angezeigt.

Dave F.
quelle

Antworten:

6

Ich denke, das ist ein Fehler in Dired (und auch in Dired +).

Ich habe es gerade in Dired + ( dired+.el) behoben . Bitte laden Sie die neueste Version herunter (oder warten Sie bis zu einem Tag, um sie in MELPA abzuholen).

Ich habe das schnell überprüft, daher ist es möglich, dass es einen guten Grund für das (langjährige) bestehende Verhalten gab, aber zumindest für den Moment denke ich, dass es ein Fehler war.

Vielen Dank für die Meldung. Nachdem ich es ein bisschen genauer überprüft habe, werde ich es als Emacs-Fehler melden. Oder Sie können dies jetzt tun, wenn Sie möchten : M-x report-emacs-bug.


AKTUALISIEREN

Eigentlich sind die Dinge interessanter (dh komplizierter). Ich bin im Moment beschäftigt, werde dies aber in Kürze aktualisieren.

Es genügt zu sagen, dass es verschiedene Vorteile gibt, die übereinstimmenden "Dateinamen" zu definieren. Wenn Sie die aktuelle (heute Morgen aktualisierte) Version von dired+.elherunterladen, funktioniert dies wie erwartet: Ordnen Sie Dateinamen ohne Unterverzeichnisse als Präfix zu.

Es kann aber auch nützlich sein, mit den Unterverzeichnissen und den Dateinamen abzugleichen. Auf diese Weise können Sie beispielsweise denselben Dateinamen in mehreren Unterverzeichnissen abgleichen - oder auch nicht, au choix.

Ich werde mich wahrscheinlich ändern %m(in Dired +), so dass eine bestimmte Art von Präfixargument Ihnen unterschiedliche, alternative Übereinstimmungsverhalten gibt. (Im Moment hebt ein Präfix arg die Markierung anstelle der Markierungen auf. Ich kann es so ändern, dass das numerische Zeichen bestimmt, ob die Markierung aufgehoben und welche Art von Übereinstimmung durchgeführt werden soll.)

Wenn Sie selbst experimentieren möchten, nehmen Sie einfach die Definition von dired-mark-files-regexpzusammen mit der Definition des Makros dired-mark-ifvon dired+.elund ändern Sie den Wert des ersten Arguments in dired-get-filename( LOCALP). Es gibt mehrere Übereinstimmungsmöglichkeiten, die von diesem Argumentwert abhängen.


UPDATE 2

OK, ich habe Dired + ( dired+.el) jetzt aktualisiert , um diesbezüglich mehr Flexibilität zu bieten.

Sie können jetzt übereinstimmende Dateinamen markieren / deren Markierung aufheben, die auf unterschiedliche Weise berücksichtigt werden:

  • Relativ (kein Verzeichnisteil, was Sie fälschlicherweise angenommen haben, dass Sie übereinstimmen).

    Dazu verwenden Sie ein negatives Präfix arg (z. B. M--) zum Markieren und ein M-0Nullpräfix arg (z . B. ) zum Aufheben der Markierung.

  • Relativ zumdefault-directory Dired-Puffer. Dies bedeutet, dass der Dateiname der Name relativ zu istdefault-directory. Für einen Eintrag in einer eingefügten Unterverzeichnisliste bedeutet dies, dass dem relativen Dateinamen (kein Verzeichnisteil) der Unterverzeichnisname relativ vorangestellt wirddefault-directory.

    Dazu verwenden Sie ein positives Argument (z. B. M-+) zum Markieren und ein doppeltes einfaches Präfix arg ( C-u C-u) zum Aufheben der Markierung.

    Dies ist, was Sie tatsächlich übereinstimmten, was erklärt, warum Sie gesehen haben, was Sie gesehen haben. Bei diesem Verhalten hätten Sie einen regulären Ausdruck angeben müssen, der dem Namen relativ zum default-directoryPuffer entspricht. Ihre Verwendung von ^im regulären Ausdruck hat versucht, mit dem Anfang dieses Namens übereinzustimmen, nicht mit dem Namen des Nichtverzeichnisses. Dies ist das gleiche Verhalten wie bei Vanille-Emacs.

  • Absolut (vollständiger Name, einschließlich aller Verzeichnisteile).

    Dazu verwenden Sie kein Präfix arg zum Markieren und ein einfaches Präfix arg ( C-u) zum Aufheben der Markierung. Dies ist daher jetzt das Standardverhalten für Dired + . Ich denke, es ist wahrscheinlich ein besseres Standardverhalten als das, was von Vanilla Emacs verwendet wird (Namen relativ zu default-directory).

Drew
quelle
Das ist großartig - vielen Dank für die Arbeit, die Sie geleistet haben, es wird sehr geschätzt
Dave F