He agregado esta función ahora a Dired + .
Puede usar C-y
(comando diredp-yank-files
) para pegar archivos, cuyos nombres absolutos ha copiado en el anillo de eliminación, en el directorio actual. El "directorio actual" aquí es lo que dired-current-directory
devuelve: el subdirectorio insertado donde se encuentra el cursor, o el directorio principal Dired si el cursor no está en una lista de subdirectorios.
Con un prefijo arg, en su C-y
lugar le solicita el directorio de destino para pegar. Por lo tanto, no necesita estar en un búfer Dired para pegar archivos en un directorio.
Deberías haber copiado los nombres de archivo en el ring de asesinatos usando M-0 w
o M-x diredp-copy-abs-filenames-as-kill
.
En Dired + esos comandos también establecen variables diredp-last-copied-filenames
en la misma cadena de nombres de archivo. C-y
usa el valor de esa variable, no lo que sea actualmente en la cabeza del anillo de matar. Esto significa que no necesita pegar inmediatamente después de copiar los nombres de archivo. Y significa que podría, en lugar de copiar nombres de archivo en el anillo de eliminación, simplemente poner los nombres en esa variable (por ejemplo, mediante programación).
Cuando lo usa C-y
, se le solicita confirmación ( y
o n
). También puede presionar l
(para "lista") cuando se le solicite, para mostrar la lista de archivos que se pegarán.
También puede copiar los archivos marcados desde el búfer Dired actual y cualquier archivo marcado en sus subdirectorios marcados, definidos de forma recursiva . Para eso usa M-0 M-+ M-w
(prefijo cero arg con comando diredp-copy-filename-as-kill-recursive
) o usa M-x diredp-copy-abs-filenames-as-kill-recursive
.
Tenga en cuenta que con Dired + también puede tener fácilmente un búfer Dired que enumera cualquier número de archivos y directorios, desde cualquier lugar. Es decir, las entradas enumeradas no necesitan estar en el mismo directorio o incluso en directorios relacionados. Ver C-x D F
(comando diredp-dired-for-files
), que está en el menú de la barra de menú Dir como elemento Dired Files ubicado en cualquier lugar . Puede marcar y luego pegar (copiar) dichos archivos arbitrarios desde un búfer Dired a cualquier directorio.
Actualización 2019-04-22:
También agregué la capacidad de mover (no solo pegar) los archivos cuyos nombres (absolutos) copió al anillo de matar al directorio actual (u otro). Esto está obligado C-w
en Dired.
diredp-move-files-named-in-kill-ring
es una función interactiva de Lisp en dired+.el
.
(diredp-move-files-named-in-kill-ring &optional DIR NO-CONFIRM-P DETAILS)
Mueva los archivos, cuyos nombres absolutos copió, al directorio actual.
Con un argumento de prefijo no negativo, se le solicitará el directorio de destino.
Con un argumento de prefijo no positivo, puede ver detalles sobre los archivos si presiona l
cuando se le solicite que confirme el pegado. De lo contrario, solo verá los nombres de los archivos. Los detalles que ve están definidos por la opción
diredp-list-file-attributes
.
Deberías haber copiado la lista de nombres de archivo como una cadena al anillo de matar usando M-0 w
o M-x diredp-copy-abs-filenames-as-kill
. Esos comandos también establecen variables diredp-last-copied-filenames
en la misma cadena. diredp-move-files-named-in-kill-ring
usa el valor de esa variable, no lo que sea actualmente en la cabeza del anillo de matar.
Cuando se llama desde Lisp:
- Argumento opcional
NO-CONFIRM-P
significa no pedir confirmación para moverse.
- Argu opcional
DETAILS
se pasa a diredp-y-or-n-files-p
.
C-w
que mover / renombrar el archivo en lugar de copiar? Graciaskill-ring
decirle a Dired para mover esos archivos en algún lugar, por ejemplo, lo que llevó a dónde moverlos.)C-w
para mover los archivos cuyos nombres copió.Puede hacer lo siguiente en Vanilla Dired (no se necesita una biblioteca de terceros):
Vaya primero a un búfer Dired que enumera el directorio de destino .
Con el cursor en la línea del encabezado del directorio para obtener una lista del directorio de destino, use
w
(comandodired-copy-filename-as-kill
). Esto copia el nombre absoluto de ese directorio de destino. (Puede copiar un nombre de directorio desde cualquier línea de encabezado de subdirectorio Dired-list de la misma manera).Vaya al búfer Dired que enumera los archivos que desea copiar . Marcar esos archivos.
Use
C
(comandodired-do-copy
) para copiar los archivos marcados . En el indicador, useC-y
para pegar el nombre (absoluto) del directorio de destino . Simplemente puede pegarlo, sin molestarse en eliminar el directorio predeterminado que se inserta en el minibúfer. (Pegarlo después de ese nombre de directorio predeterminado atenúa ese nombre predeterminado; se ignora).Creo que esto es tan simple como lo que usted describe (
C-w
para copiar nombres de archivos marcados seguidos deC-y
la lista Dired de destino), pero el orden es opuesto : primero copie el nombre del directorio de destino y luego péguelo en el comandoC
(dired-do-copy
) .(
dired-do-copy
busca archivos existentes con el mismo nombre en el directorio de destino, etc.)Consejo: (Esto no es necesario si usa Dired + ; consulte mi otra respuesta aquí). Si tiene la intención de copiar (o mover) archivos de varios directorios al mismo directorio de destino, y podría estar haciendo otras cosas con el anillo de cierre en el medio, de modo que el nombre del directorio de destino copiado ya no sea el primero en el anillo de eliminación, luego use la selección secundaria para seleccionar el nombre del directorio de destino. La selección secundaria no depende de la región o la posición del cursor; puede pegarla tantas veces como desee, independientemente de los cambios en el anillo de cierre. Puede pegarlo con el mouse, pero es más fácil de usar
C-M-y
desde la bibliotecasecond-sel.el
.fuente
Su idea parece sencilla, tal vez pueda intentar implementarla usted mismo, también puede usar lo siguiente para comenzar si lo desea.
fuente
El administrador de archivos Ranger funciona de la manera que usted describe, pero está inspirado en vim (por lo tanto, las combinaciones
yy
de teclas de vim para tirar / copiarp
para pegar, etc.). Emacs también tiene implementación de guardabosques. Pruébelo, tal vez se ajuste a su necesidad.Yo mismo uso emacs sunrise-commander, que es similar a Midnight Commander (mc), cada vez que siento que necesito la administración de archivos de doble panel.
Upd: dired-ranger tiene esa copia / pegado que ha descrito. Al menos en los documentos.
fuente
dired-ranger
y estánranger
disponibles en MELPA. ¿Te refieres a cuál?También sugeriría usar
dired-ranger
. Esto es lo que tengo en miinit.el
:fuente
Dired Ranger fue la verdadera solución para mí:
Puede lograr un comportamiento común del explorador de archivos como lo describe, solo con esta configuración simple (suponiendo que use
use-package
):fuente