डॉटेड बफ़र्स के बीच फ़ाइलों और निर्देशिकाओं को कॉपी / पेस्ट करने के सरल तरीके


10

क्या M-w C-yदो डेयरिंग बफ़र्स के बीच पेस्ट फ़ाइलों और निर्देशिकाओं को कॉपी करने का एक सरल तरीका है?

मेरा मतलब है कि कुछ वस्तुओं (फाइलों और बफ़र) को mतब तक M-w(या किसी अन्य शॉर्टकट) से कॉपी करके , फिर किसी अन्य बिंदीदार बफ़र पर जा रहे हैं (जो कि आवश्यक रूप से पिछले बिंदास बफ़र (स) की खिड़की के किनारे-किनारे नहीं है ) तो वहाँ (या एक और शॉर्टकट) yankingद्वारा सभी कॉपी की गई फ़ाइल C-y? यह एक सरल कार्य है जो विभिन्न ओएस में कई फ़ाइल खोजकर्ता कर सकते हैं।

वायर्ड में शास्त्रीय कॉपी विकल्प सी के साथ समस्या यह है कि जैसे ही इसे दबाया जाता है, यह गंतव्य के लिए पूछता है। यदि गंतव्य बफ़र का पथ बहुत लंबा है या बहुत अधिक खोले गए बफ़र हैं, तो यह दृष्टिकोण जटिल है।

मैं एक आइटम की तलाश में हूं ताकि पहले वस्तुओं को कॉपी किया जा सके और फिर उन्हें एक उचित डेयर बफर में पेस्ट किया जा सके।

एक संबंधित प्रश्न है कि Emacs Dired में फाइल को जल्दी से कॉपी / मूव कैसे करें? सी का उपयोग करने के शास्त्रीय दृष्टिकोण का उपयोग करता है जब दो वायर्ड विंडो विकल्प का उपयोग करके लंबवत अलग हो जाते हैं (setq dired-dwim-target t)

इसे प्राप्त करने के तरीके क्या हैं?

जवाबों:


5

मैंने यह सुविधा अब Dired + में जोड़ दी है ।

आप फ़ाइलों को चिपकाने के लिए C-y(कमांड diredp-yank-files) का उपयोग कर सकते हैं , जिनके निरपेक्ष नाम आपने वर्तमान रिंग तक, किल रिंग में कॉपी किए हैं। यहां "वर्तमान निर्देशिका" वह है जो dired-current-directoryरिटर्न करता है: सम्मिलित उपनिर्देशिका जहां कर्सर स्थित है, या यदि मुख्य उप-सूची में नहीं है तो तारांकित मुख्य निर्देशिका।

एक उपसर्ग 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 फ़ाइलें कहीं भी स्थित । आप किसी भी डाइरेक्टरी में ऐसी मनमानी फाइलों को किसी भी डायरेक्टरी में मार्क और कॉपी (कॉपी) कर सकते हैं।


अपडेट 2019-04-22:

मैंने उन फ़ाइलों को स्थानांतरित करने की क्षमता (सिर्फ पेस्ट नहीं) जोड़ी, जिनके (निरपेक्ष) नामों को आपने प्रतिलिपि अंगूठी में वर्तमान (या किसी अन्य) निर्देशिका में कॉपी किया। यह C-wDired में बाध्य है ।

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उस चर के मूल्य का उपयोग करता है, न कि वर्तमान में जो भी मार अंगूठी के सिर पर है।

जब लिस्प से कहा जाता है:

  • वैकल्पिक आर्ग का NO-CONFIRM-Pमतलब है कि स्थानांतरित करने के लिए पुष्टि न करें।
  • वैकल्पिक arg DETAILSको पास किया जाता है diredp-y-or-n-files-p

अच्छा काम किया। क्या diredp को C-wकॉपी के बजाय फ़ाइल को स्थानांतरित / नाम बदलना पड़ा है? धन्यवाद
azzamsa

@ रज़ाम्सा: नहीं, मुझे ऐसा नहीं लगता। (मुझे लगता है कि आपको उन फ़ाइल नामों का उपयोग करने का मतलब है जो kill-ringउन फ़ाइलों को कहीं स्थानांतरित करने के लिए बताए गए हैं, जैसे, उन्हें स्थानांतरित करने के लिए संकेत देना।)
आकर्षित

ज़रूर। मेरा मतलब है कि आप इस कार्यक्षमता को क्यों नहीं जोड़ते हैं? यह अद्भुत होगा :)। क्योंकि वर्तमान, केवल Cy का समर्थन करता है। केवल कॉपी करें, स्थानांतरित न करें / नाम बदलें।
अज़मसा

अभी। मैं इस धन्यवाद के लिए डेयर-रेंजर हैक का उपयोग करता हूं ।
अज़मसा

FYI करें - अब आप उन C-wफ़ाइलों को स्थानांतरित करने के लिए उपयोग कर सकते हैं जिनके नाम की आपने प्रतिलिपि बनाई थी।
ड्रू

4

आप वेनिला वायर्ड (कोई 3-पार्टी पुस्तकालय की जरूरत है) में निम्नलिखित कर सकते हैं:

  1. लक्ष्य डाइरेक्टरी को सूचीबद्ध करने वाले Dired बफ़र पर पहले जाएँ ।

  2. लक्ष्य निर्देशिका की सूची के लिए डायरेक्टरी हेडर लाइन पर कर्सर के साथ, उपयोग w(कमांड dired-copy-filename-as-kill) करें। यह उस लक्ष्य निर्देशिका के पूर्ण नाम की प्रतिलिपि बनाता है। (आप उसी तरह से किसी भी Dired-लिस्टिंग सबडिडर हेडर लाइन से dir नाम कॉपी कर सकते हैं।)

  3. डेयर बफ़र पर जाएँ जो उन फ़ाइलों को सूचीबद्ध करता है जिन्हें आप कॉपी करना चाहते हैं । उन फ़ाइलों को चिह्नित करें।

  4. चिह्नित फ़ाइलों की प्रतिलिपि बनाने के लिए C(कमांड dired-do-copy) का उपयोग करें । प्रॉम्प्ट पर, लक्ष्य निर्देशिका का (पूर्ण) नाम पेस्ट करने के लिए उपयोग करें । आप इसे केवल पेस्ट कर सकते हैं, मिनीबफ़र में डाली गई डिफ़ॉल्ट निर्देशिका को हटाने के लिए परेशान किए बिना। (उस डिफ़ॉल्ट डीआईआर नाम के बाद उसे चिपकाना उस डिफ़ॉल्ट नाम को कम कर देता है - इसे अनदेखा कर दिया जाता है।)C-y

यह है, मुझे लगता है, जैसा कि आप जो वर्णन करते हैं, वह उतना ही सरल है, जितना आप लक्षित C-wफ़ाइल C-yसूची में सूचीबद्ध फ़ाइल नामों की प्रतिलिपि बनाना चाहते हैं ), लेकिन आदेश विपरीत है : आप पहले लक्ष्य निर्देशिका नाम की प्रतिलिपि बनाएँ, और फिर इसे C( dired-do-copy) कमांड में पेस्ट करें ।

( dired-do-copyलक्ष्य dir में उसी नाम की मौजूदा फाइलों के लिए जाँच इत्यादि)


युक्ति: (यदि आप Dired + का उपयोग करते हैं तो इसकी आवश्यकता नहीं है - मेरा अन्य उत्तर यहां देखें।) यदि आप एक ही लक्ष्य निर्देशिका के लिए कई निर्देशिकाओं से फ़ाइलों को कॉपी (या स्थानांतरित) करने का इरादा रखते हैं, और हो सकता है कि आप किल-रिंग के साथ अन्य काम कर रहे हों बीच में, ताकि कॉपी किए गए लक्ष्य डायर का नाम अब किल-रिंग में पहले न हो, फिर लक्ष्य चयन का नाम चयन करने के लिए द्वितीयक चयन का उपयोग करें। द्वितीयक चयन क्षेत्र या कर्सर की स्थिति पर निर्भर नहीं करता है - आप इसे जितनी बार चाहें, पेस्ट कर सकते हैं, भले ही किल-रिंग में परिवर्तन हो। आप इसे माउस का उपयोग करके पेस्ट कर सकते हैं, लेकिन यह C-M-yलाइब्रेरी से उपयोग करने के लिए आसान है 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)))

आपका बहुत बहुत धन्यवाद। मेरे पास एक सुझाव है: चिपकाने के बाद, नए कॉपी किए गए आइटम देखने के लिए बिंदीदार बफर को अपडेट (रिफ्रेश) करें।
नाम

एक अन्य सुझाव: चिपकाने के बाद चिह्नित वस्तुओं को चिह्नित करना।
नाम

@ अच्छे सुझाव। मैं आपको अपने आप से उन्हें लागू करने की सलाह देता हूं क्योंकि आप एक हैं जो इसका उपयोग करने जा रहे हैं। सौभाग्य।
xununyang

2

रेंजर फ़ाइल प्रबंधक आपके द्वारा बताए गए तरीके से काम करता है, लेकिन यह विम से प्रेरित होता है (इस प्रकार कीबाइंडिंग yyको यैंक / कॉपी pपेस्ट करने के लिए)। Emacs में रेंजर का कार्यान्वयन भी है। यह कोशिश करो, शायद यह आपकी आवश्यकता फिट होगी।

मैं अपने लिए एमएसीएस सनराइज-कमांडर का उपयोग करता हूं जो मिडनाइट कमांडर (एमसी) के समान है, जब भी मुझे लगता है कि मुझे डबल-पैनेस-फाइल-मैनेजिंग की आवश्यकता है।

अपडेट: 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.
;; ...

MELPA पर उपलब्ध dired-rangerऔर rangerउपलब्ध हैं । आपका मतलब है कौन सा?
नाम

ठीक है, मुझे डेयर-रेंजर के बारे में नहीं पता था, लेकिन विवरण से ऐसा लगता है जैसे आप चाहते हैं।
मैक्सिम किम

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

डायर रेंजर मेरे लिए सही समाधान था:

आप सामान्य फ़ाइल एक्सप्लोरर व्यवहार को प्राप्त कर सकते हैं जैसा कि आप वर्णन करते हैं, बस इस सरल कॉन्फ़िगरेशन (आपके द्वारा उपयोग किए जाने वाले use-package) के साथ:

(use-package dired-ranger
  :bind (:map dired-mode-map
              ("W" . dired-ranger-copy)
              ("X" . dired-ranger-move)
              ("Y" . dired-ranger-paste)))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.