Я добавил эту функцию сейчас в Dired + .
Вы можете использовать C-y
(команду diredp-yank-files
) для вставки файлов, чьи абсолютные имена вы скопировали в список уничтожений, в текущий каталог. Здесь dired-current-directory
возвращается «текущий каталог» : вставленный подкаталог, в котором находится курсор, или основной каталог Dired, если курсор отсутствует в списке подкаталогов.
С префиксом arg C-y
вместо этого запрашивает целевой каталог для вставки. Таким образом, вам не нужно находиться в буфере Dired для вставки файлов в каталог.
Вы должны были скопировать имена файлов в список уничтожений с помощью M-0 w
или M-x diredp-copy-abs-filenames-as-kill
.
В Dired + эти команды также устанавливают переменную diredp-last-copied-filenames
для той же строки имен файлов. C-y
использует значение этой переменной, а не то, что в данный момент находится во главе списка уничтожений. Это означает, что вам не нужно вставлять сразу после копирования имен файлов. И это означает, что вы можете вместо копирования имен файлов в список уничтожений просто поместить имена в эту переменную (например, программно).
Когда вы используете C-y
, вам будет предложено подтвердить ( y
или n
). Вы также можете нажать l
(для «списка») при появлении запроса, чтобы отобразить список файлов, которые будут вставлены.
Вы также можете скопировать помеченные файлы из текущего буфера Dired и любые помеченные файлы в его отмеченных подкаталогах, определенных рекурсивно . Для этого вы используете M-0 M-+ M-w
(нулевой префикс arg с командой diredp-copy-filename-as-kill-recursive
) или используйте M-x diredp-copy-abs-filenames-as-kill-recursive
.
Обратите внимание, что с Dired + вы также можете легко иметь буфер Dired, который перечисляет любое количество файлов и каталогов из любого места. То есть перечисленные записи не обязательно должны находиться в одном каталоге или даже в связанных каталогах. Смотрите C-x D F
(команда diredp-dired-for-files
), которая находится в меню строки меню Dir как пункт Dired Files, расположенные где угодно . Вы можете пометить, а затем вставить (скопировать) такие произвольные файлы из буфера Dired в любой каталог.
Обновление 2019-04-22:
Я также добавил возможность перемещать (а не просто вставлять) файлы, чьи (абсолютные) имена вы скопировали в список уничтожений в текущий (или другой) каталог. Это обязательно C-w
в Dired.
diredp-move-files-named-in-kill-ring
представляет собой интерактивную функцию Лиспа в dired+.el
.
(diredp-move-files-named-in-kill-ring &optional DIR NO-CONFIRM-P DETAILS)
Переместите файлы, чьи абсолютные имена вы скопировали, в текущий каталог.
С неотрицательным префиксом arg вам вместо этого предлагается указать целевой каталог.
С не положительным префиксом arg вы можете увидеть подробную информацию о файлах, если вы нажмете, l
когда будет предложено подтвердить вставку. В противном случае вы видите только имена файлов. Детали, которые вы видите, определяются опцией
diredp-list-file-attributes
.
Вы должны были скопировать список имен файлов в виде строки в список уничтожений, используя M-0 w
или M-x diredp-copy-abs-filenames-as-kill
. Эти команды также устанавливают переменную diredp-last-copied-filenames
в той же строке. diredp-move-files-named-in-kill-ring
использует значение этой переменной, а не то, что в данный момент находится во главе списка уничтожений.
Когда звонят из Лисп:
- Необязательный аргумент arg
NO-CONFIRM-P
означает не запрашивать подтверждение для перемещения.
- Необязательный аргумент
DETAILS
передается в diredp-y-or-n-files-p
.
C-w
перемещать / переименовывать файл вместо копирования? Спасибоkill-ring
чтобы сообщить Dired, чтобы переместить эти файлы куда-нибудь, например, запросить, куда их переместить.)C-w
для перемещения файлов, имена которых вы скопировали.Вы можете сделать следующее в vanilla Dired (сторонняя библиотека не требуется):
Сначала перейдите в буфер Dired, в котором указан целевой каталог .
Поместив курсор на строку заголовка каталога для вывода списка целевого каталога, используйте
w
(командаdired-copy-filename-as-kill
). Это копирует абсолютное имя этого целевого каталога. (Вы можете скопировать имя каталога из любой строки заголовка дополнительного каталога Dired-list таким же образом.)Перейдите в буфер Dired, в котором перечислены файлы, которые вы хотите скопировать . Отметьте эти файлы.
Используйте
C
(командуdired-do-copy
) для копирования отмеченных файлов . В командной строке используйтеC-y
для вставки (абсолютного) имени целевого каталога . Вы можете просто вставить его, не удосужившись удалить каталог по умолчанию, который вставлен в минибуфер. (Вставка после того, как это имя по умолчанию dir затемняет это имя по умолчанию - оно игнорируется.)Я думаю, что это так же просто, как то, что вы описали (
C-w
для копирования отмеченных имен файлов, за которыми следуетC-y
целевой листинг Dired), но в обратном порядке : сначала вы копируете имя целевого каталога, а затем вставляете его в командуC
(dired-do-copy
) ,(
dired-do-copy
проверяет наличие файлов с таким же именем в целевой директории и т. д.)Совет: (Это не нужно, если вы используете Dired + - см. Мой другой ответ здесь.) Если вы собираетесь копировать (или перемещать) файлы из нескольких каталогов в один и тот же целевой каталог, и вы, возможно, делаете другие вещи с помощью kill-ring между ними, чтобы скопированное имя целевого каталога больше не было первым в списке уничтожений, а затем используйте дополнительный выбор, чтобы выбрать имя целевого директора. Вторичный выбор не зависит от региона или положения курсора - вы можете вставить его столько раз, сколько хотите, независимо от изменений в kill-ring. Вы можете вставить его с помощью мыши, но его удобнее использовать
C-M-y
из библиотекиsecond-sel.el
.источник
Ваша идея звучит просто, возможно, вы можете попробовать реализовать ее самостоятельно, вы также можете использовать следующее, чтобы начать, если хотите.
источник
Файловый менеджер Ranger работает так, как вы описываете, но он вдохновлен vim (таким образом, привязка клавиш vim
yy
к yank / copyp
to paste и т.д.). Emacs также имеет реализацию Ranger. Попробуйте, может быть, это будет соответствовать вашим потребностям.Для себя я использую emacs sunrise-commander, который похож на Midnight Commander (mc), когда я чувствую, что мне нужно управление двойными панелями.
Upd: у dired-ranger есть та копия / вставка, которую вы описали. По крайней мере, в документах.
источник
dired-ranger
и естьranger
на MELPA. Вы имеете в виду, какой?Я бы также предложил использовать
dired-ranger
. Вот что я имею в своемinit.el
:источник
Dired Ranger был верным решением для меня:
Вы можете добиться общего поведения файлового проводника, как вы описываете, просто с помощью этой простой конфигурации (при условии, что вы используете
use-package
):источник