삭제 된 버퍼간에 파일 및 디렉토리를 복사 / 붙여 넣기하는 간단한 방법


10

M-w C-y두 개의 dired 버퍼 사이에 붙여 넣기 파일과 디렉토리를 복사 하는 간단한 방법이 있습니까?

나는 일부 항목 (파일 및 버퍼)을 마킹 한 m다음 M-w(또는 다른 바로 가기) 로 복사 한 다음 다른 dired 버퍼로 이동합니다 (이것은 반드시 이전 dired 버퍼의 창과 나란히있는 것은 아닙니다) ) 다음에 yanking모든 복사 파일 C-y(또는 다른 바로 가기)이 있습니까? 이것은 다른 OS의 많은 파일 탐색기가 할 수있는 간단한 작업입니다.

기존의 복사 옵션 C 에 문제가있는 것은 누르 자마자 목적지를 묻는다는 것입니다. 대상 버퍼의 경로가 너무 길거나 열린 dired 버퍼가 너무 많으면이 방법이 복잡합니다.

먼저 항목을 복사 한 다음 적절한 dired 버퍼에 붙여 넣을 솔루션을 찾고 있습니다.

관련 질문 Emacs Dired에서 파일을 빠르게 복사 / 이동하는 방법은 무엇입니까? 옵션을 사용하여 두 개의 dired 윈도우가 세로로 분리 된 경우 C 를 누르는 전통적인 방법을 사용합니다 (setq dired-dwim-target t).

이것을 달성하는 방법은 무엇입니까?

답변:


5

이 기능을 Dired +에 추가했습니다 .

C-y(command 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온이다), 디렉터리 항목으로 메뉴 바 메뉴 Dired 어디서나 파일 위치를 . Dired 버퍼에서 임의의 디렉토리로 이러한 임의의 파일을 표시 한 후 붙여 넣기 (복사) 할 수 있습니다.


2019-04-22 업데이트 :

또한 킬 링에 복사 한 (절대) 이름의 파일을 현재 (또는 다른) 디렉토리 로 이동 (붙여 넣기 만하는) 하는 기능도 추가했습니다 . 이것은 C-wDired에 묶여 있습니다.

diredp-move-files-named-in-kill-ring의 대화식 Lisp 함수입니다 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킬 링의 헤드에있는 것이 아니라 해당 변수의 값을 사용합니다.

Lisp에서 호출 할 때 :

  • 선택적 arg NO-CONFIRM-P는 이동 확인을 요청하지 않음을 의미합니다.
  • 선택적 arg DETAILS가 (으)로 전달되었습니다 diredp-y-or-n-files-p.

잘 했어. diredp가 C-wcopy? 대신 파일을 이동 / 이름 바꾸기해야 했습니까? 감사합니다
azzamsa

@ azzamsa : 아니요, 그렇게 생각하지 않습니다. ( kill-ring예를 들어, Dired에게 파일을 어디로 옮길 것인지 묻는 메시지가 표시되는 파일 이름을 사용한다는 의미 입니다.)
Drew

확실한. 이 기능을 왜 추가하지 않습니까? 대단 할 것입니다 :). 전류 때문에 Cy 만 지원하십시오. 복사 전용, 이동 / 이름 바꾸기가 아님.
azzamsa

지금. 내가 사용 dired-레인저 해킹을 위해 감사합니다.
azzamsa

참고-이제 C-w이름을 복사 한 파일을 이동하는 데 사용할 수 있습니다 .
Drew

4

바닐라 Dired에서 다음을 수행 할 수 있습니다 (타사 라이브러리 필요 없음).

  1. 먼저 대상 디렉토리 를 나열하는 Dired 버퍼로 이동하십시오 .

  2. 대상 디렉토리 목록을 보려면 디렉토리 헤더 행에 커서를 놓고 w(command dired-copy-filename-as-kill)를 사용하십시오. 대상 디렉토리의 절대 이름이 복사됩니다. 동일한 방식으로 Dired-listing 하위 디렉토리 헤더 행에서 디렉토리 이름을 복사 할 수 있습니다.

  3. 복사 할 파일 이 나열된 Dired 버퍼로 이동 하십시오 . 해당 파일을 표시하십시오.

  4. 표시된 파일복사 하려면 C(명령 dired-do-copy)을 사용하십시오 . 프롬프트 에서 대상 디렉토리의 (절대) 이름붙여 넣습니다 . 미니 버퍼에 삽입 된 기본 디렉토리를 제거하지 않고 붙여 넣기 만하면됩니다. (기본 디렉토리 이름 뒤에 붙여 넣으면 기본 이름이 흐리게 표시됩니다. 무시됩니다.)C-y

이것은 내가 생각하는 것처럼 간단 하지만 (대상 Dired 목록에 C-w표시된 파일 이름을 복사 C-y하는 것) 순서는 반대입니다 . 먼저 대상 디렉토리 이름을 복사 한 다음 C( dired-do-copy) 명령에 붙여 넣습니다. .

( dired-do-copy대상 디렉토리 등에서 동일한 이름의 기존 파일을 확인합니다.)


팁 : ( Dired + 를 사용하는 경우 필요하지 않습니다 . 여기에서 다른 대답을 참조하십시오.) 여러 디렉토리에서 동일한 대상 디렉토리로 파일을 복사하거나 이동하려는 경우 킬 링으로 다른 작업을 수행 할 수 있습니다. 복사 된 대상 디렉토리 이름이 더 이상 kill-ring에서 첫 번째가되지 않도록 보조 선택 을 사용 하여 대상 디렉토리 이름을 선택하십시오. 보조 선택은 커서의 영역이나 위치에 의존하지 않습니다. 킬 링의 변경에 관계없이 원하는 횟수만큼 붙여 넣을 수 있습니다. 마우스를 사용하여 붙여 넣을 수 있지만 C-M-ylibrary 에서 사용하는 것이 더 편리합니다 second-sel.el.


3

아이디어는 간단하게 들립니다. 어쩌면 직접 구현해 볼 수도 있습니다. 원하는 경우 다음을 사용하여 시작할 수도 있습니다.

(defvar your-dired-copy-list nil)

(defun your-dired-copy ()
  (interactive)
  (setq your-dired-copy-list (dired-get-marked-files)))

(defun your-dired-paste ()
  (interactive)
  (when your-dired-copy-list
    (shell-command
     (mapconcat
      #'shell-quote-argument
      `("cp" "-r" ,@your-dired-copy-list ,default-directory)
      " "))
    (setq your-dired-copy-list nil)))

대단히 감사합니다. 붙여 넣은 후에 새로운 복사 된 항목을 보려면 dired 버퍼를 업데이트 (새로 고침)하십시오.
이름

또 다른 제안 : 붙여 넣은 후에 표시된 항목을 표시 해제하십시오.
이름

@Name 좋은 제안. 당신이 그것을 사용할 사람이기 때문에 직접 구현하는 것이 좋습니다. 행운을 빕니다.
xuchunyang

2

레인저 파일 관리자는 당신이 설명하는 방식으로 작동하지만,이 정력에 의해 영감을 (따라서 정력 키 바인딩 yy에 가득 차면 / 복사 p등을 붙여). 이맥스는 또한 레인저를 구현했다. 시도해보십시오. 필요할 수도 있습니다.

이중 창 파일 관리가 필요할 때마다 Midnight Commander (mc)와 비슷한 emacs sunrise-commander를 사용합니다.

Upd : dired-ranger에 설명 된 복사 / 붙여 넣기가 있습니다. 적어도 문서에서는.

;; Multi-stage copy/pasting of files
;; ---------------------------------

;; A feature present in most orthodox file managers is a "two-stage"
;; copy/paste process.  Roughly, the user first selects some files,
;; "copies" them into a clipboard and then pastes them to the target
;; location.  This workflow is missing in dired.

;; In dired, user first marks the files, then issues the
;; `dired-do-copy' command which prompts for the destination.  The
;; files are then copied there.  The `dired-dwim-target' option makes
;; this a bit friendlier---if two dired windows are opened, the other
;; one is automatically the default target.

;; With the multi-stage operations, you can gather files from
;; *multiple* dired buffers into a single "clipboard", then copy or
;; move all of them to the target location.  Another huge advantage is
;; that if the target dired buffer is already opened, switching to it
;; via ido or ibuffer is often faster than selecting the path.

;; Call `dired-ranger-copy' to add marked files (or the file under
;; point if no files are marked) to the "clipboard".  With non-nil
;; prefix argument, add the marked files to the current clipboard.

;; Past clipboards are stored in `dired-ranger-copy-ring' so you can
;; repeat the past pastes.
;; ...

있습니다 dired-rangerranger사용할 수는 MELPA에. 당신은 어느 것을 의미합니까?
이름

글쎄, 난 dired-ranger에 대해 몰랐지만 설명에서 그것은 당신이 원하는 것 같습니다.
Maxim Kim

1

또한 사용하는 것이 좋습니다 dired-ranger. 이것이 내가 가진 것입니다 init.el:

(use-package dired-ranger
  :ensure t
  :config
  (setq dired-ranger-copy-ring-size 1)
    (define-key dired-mode-map (kbd "C-w")
        (lambda ()
            (interactive)
            (dired-ranger-copy nil) ; t adds item to dired-ranger-copy-ring
            (define-key dired-mode-map (kbd "C-y") 'dired-ranger-move)))
    (define-key dired-mode-map (kbd "M-w")
        (lambda ()
            (interactive)
            (dired-ranger-copy nil)
            (define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)))
)

0

Dired ranger 는 저에게 진정한 해결책이었습니다.

이 간단한 구성을 사용하여 설명 할 때 일반적인 파일 탐색기 동작을 수행 할 수 있습니다 (사용한다고 가정 use-package).

(use-package dired-ranger
  :bind (:map dired-mode-map
              ("W" . dired-ranger-copy)
              ("X" . dired-ranger-move)
              ("Y" . dired-ranger-paste)))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.