Ich habe diese Funktion jetzt zu Dired + hinzugefügt .
Mit C-y
(Befehl diredp-yank-files
) können Sie Dateien, deren absolute Namen Sie in den Kill Ring kopiert haben, in das aktuelle Verzeichnis einfügen. Das "aktuelle Verzeichnis" gibt hier Folgendes dired-current-directory
zurück: das eingefügte Unterverzeichnis, in dem sich der Cursor befindet, oder das Dired-Hauptverzeichnis, wenn sich der Cursor nicht in einer Unterverzeichnisliste befindet.
C-y
Fordert Sie stattdessen mit einem Präfix arg zur Eingabe des Zielverzeichnisses für das Einfügen auf. Sie müssen sich also nicht in einem Dired-Puffer befinden, um Dateien in ein Verzeichnis einzufügen.
Sie sollten Dateinamen mit M-0 w
oder in den Kill Ring kopiert haben M-x diredp-copy-abs-filenames-as-kill
.
In Dired + setzen diese Befehle die Variable auch diredp-last-copied-filenames
auf dieselbe Zeichenfolge von Dateinamen. C-y
Verwendet den Wert dieser Variablen, nicht das, was sich derzeit am Kopf des Kill-Rings befindet. Dies bedeutet, dass Sie nicht sofort nach dem Kopieren der Dateinamen einfügen müssen. Und es bedeutet, dass Sie, anstatt Dateinamen in den Kill-Ring zu kopieren, einfach die Namen in diese Variable einfügen können (z. B. programmgesteuert).
Wenn Sie verwenden C-y
, werden Sie zur Bestätigung ( y
oder n
) aufgefordert . Sie können auch auf l
(für "Liste") klicken, wenn Sie dazu aufgefordert werden, um die Liste der Dateien anzuzeigen, die eingefügt werden sollen.
Sie können die markierten Dateien auch aus dem aktuellen Dired-Puffer und allen markierten Dateien in den markierten Unterverzeichnissen kopieren , die rekursiv definiert wurden . Dafür verwenden Sie M-0 M-+ M-w
(Null Präfix arg mit Befehl diredp-copy-filename-as-kill-recursive
) oder verwenden M-x diredp-copy-abs-filenames-as-kill-recursive
.
Beachten Sie, dass Sie mit Dired + auch problemlos einen Dired-Puffer haben können, der von überall aus eine beliebige Anzahl von Dateien und Verzeichnissen auflistet. Das heißt, die aufgelisteten Einträge müssen sich nicht im selben Verzeichnis oder sogar in verwandten Verzeichnissen befinden. Siehe C-x D F
(Befehl diredp-dired-for-files
), der sich im Menü der Dir -Menüleiste als Element Dired Files befindet, das sich überall befindet . Sie können solche beliebigen Dateien markieren und dann aus einem Dired-Puffer in ein beliebiges Verzeichnis einfügen (kopieren).
Update 2019-04-22:
Ich habe auch die Möglichkeit hinzugefügt, die Dateien, deren (absolute) Namen Sie in den Kill Ring kopiert haben, in das aktuelle (oder ein anderes) Verzeichnis zu verschieben (nicht nur einzufügen). Dies ist C-w
in Dired gebunden .
diredp-move-files-named-in-kill-ring
ist eine interaktive Lisp-Funktion in dired+.el
.
(diredp-move-files-named-in-kill-ring &optional DIR NO-CONFIRM-P DETAILS)
Verschieben Sie Dateien, deren absolute Namen Sie kopiert haben, in das aktuelle Verzeichnis.
Mit einem nicht negativen Präfix arg werden Sie stattdessen zur Eingabe des Zielverzeichnisses aufgefordert.
Mit einem nicht positiven Präfix arg können Sie Details zu den Dateien anzeigen, wenn Sie auf l
drücken, wenn Sie aufgefordert werden, das Einfügen zu bestätigen. Ansonsten sehen Sie nur die Dateinamen. Die angezeigten Details werden nach Option definiert
diredp-list-file-attributes
.
Sie sollten die Liste der Dateinamen als Zeichenfolge mit M-0 w
oder in den Kill-Ring kopiert haben M-x diredp-copy-abs-filenames-as-kill
. Diese Befehle setzen auch die Variable diredp-last-copied-filenames
auf dieselbe Zeichenfolge. diredp-move-files-named-in-kill-ring
Verwendet den Wert dieser Variablen, nicht das, was sich derzeit am Kopf des Kill-Rings befindet.
Wenn von Lisp angerufen:
- Optionales Argument
NO-CONFIRM-P
bedeutet, dass Sie nicht um Bestätigung für den Umzug bitten müssen.
- Optionales Argument
DETAILS
wird an übergeben diredp-y-or-n-files-p
.
C-w
Datei verschieben / umbenennen anstatt zu kopieren? Dankekill-ring
Dired stehen, um diese Dateien irgendwohin zu verschieben, z. B. um zu fragen, wohin sie verschoben werden sollen.)C-w
die Dateien verschieben, deren Namen Sie kopiert haben.In vanilla Dired können Sie Folgendes tun (keine Bibliothek eines Drittanbieters erforderlich):
Wechseln Sie zuerst zu einem Dired-Puffer, in dem das Zielverzeichnis aufgeführt ist .
Verwenden Sie
w
(Befehldired-copy-filename-as-kill
), wenn sich der Cursor in der Kopfzeile des Verzeichnisses befindet, um eine Liste des Zielverzeichnisses anzuzeigen . Dies kopiert den absoluten Namen dieses Zielverzeichnisses. (Sie können auf die gleiche Weise einen Verzeichnisnamen aus jeder Unterverzeichnis-Kopfzeile mit Dired-Listing kopieren.)Wechseln Sie zum Dired-Puffer, in dem die Dateien aufgelistet sind, die Sie kopieren möchten . Markieren Sie diese Dateien.
Verwenden Sie
C
(Befehldired-do-copy
), um die markierten Dateien zu kopieren . Verwenden SieC-y
an der Eingabeaufforderung den (absoluten) Namen des Zielverzeichnisses . Sie können es einfach einfügen, ohne das Standardverzeichnis entfernen zu müssen, das in den Minibuffer eingefügt wird. (Wenn Sie es nach diesem Standardverzeichnisnamen einfügen, wird dieser Standardname verkleinert - es wird ignoriert.)Ich denke, dies ist so einfach wie das, was Sie beschreiben (
C-w
um markierte Dateinamen zu kopieren, gefolgt vonC-y
der Liste "Ziel", aber die Reihenfolge ist umgekehrt : Sie kopieren zuerst den Namen des Zielverzeichnisses und fügen ihn dann in den BefehlC
(dired-do-copy
) ein .(
dired-do-copy
sucht im Zielverzeichnis nach vorhandenen gleichnamigen Dateien usw.)Tipp: (Dies ist nicht erforderlich, wenn Sie Dired + verwenden - siehe meine andere Antwort hier.) Wenn Sie Dateien aus mehreren Verzeichnissen in dasselbe Zielverzeichnis kopieren (oder verschieben) möchten und möglicherweise andere Aktionen mit dem Kill-Ring ausführen Dazwischen, damit der kopierte Zielverzeichnisname möglicherweise nicht mehr zuerst im Kill-Ring steht, verwenden Sie dann die sekundäre Auswahl , um den Zielverzeichnisnamen auszuwählen. Die sekundäre Auswahl hängt nicht von der Region oder der Position des Cursors ab. Sie können sie beliebig oft einfügen, unabhängig von Änderungen am Kill-Ring. Sie können es mit der Maus einfügen, aber es ist einfacher, es
C-M-y
aus der Bibliothek zu verwendensecond-sel.el
.quelle
Ihre Idee klingt unkompliziert. Vielleicht können Sie versuchen, sie selbst umzusetzen. Sie können auch Folgendes verwenden, um loszulegen, wenn Sie möchten.
quelle
Der Ranger-Dateimanager funktioniert wie beschrieben, ist jedoch von vim inspiriert (daher vim-Tastenkombinationen
yy
zum Ziehen / Kopierenp
zum Einfügen usw.). Emacs hat auch die Implementierung von Ranger. Probieren Sie es aus, vielleicht passt es Ihren Bedürfnissen.Ich selbst benutze Emacs Sunrise-Commander, ähnlich wie Midnight Commander (mc), wenn ich das Gefühl habe, dass ich doppelte Fenster verwalten muss.
Upd: dired-ranger hat das von Ihnen beschriebene Kopieren / Einfügen. Zumindest in den Dokumenten.
quelle
dired-ranger
und gibtranger
es auf MELPA. Du meinst welches?Ich würde auch vorschlagen, zu verwenden
dired-ranger
. Das habe ich in meineminit.el
:quelle
Dired Ranger war die wahre Lösung für mich:
Sie können ein allgemeines Verhalten des Datei-Explorers erreichen, wie Sie es beschreiben, nur mit dieser einfachen Konfiguration (vorausgesetzt, Sie verwenden
use-package
):quelle