आईडी-मोड में हाल ही में खोली गई फाइलें


12

मैं उपयोग करता हूं ido-mode, लेकिन एक चीज जिसके बारे में मुझे नफरत है, वह यह है कि C-x C-fमैं up/downहाल ही में खोली गई फ़ाइलों के माध्यम से साइकिल चलाने के लिए कुंजियों का उपयोग नहीं कर सकता , क्योंकि यह उदाहरण के लिए उपयोग किया जाता था iswitchb। मैं idoइस तरह से कैसे काम कर सकता हूं ?

जवाबों:


16

ido-mode( M-x customize-group RET ido RET) के लिए कस्टमाइज़ेशन विकल्पों को देखते हुए, मैं आपके द्वारा वर्णित साइकलिंग व्यवहार को सक्षम करने के लिए कोई विकल्प नहीं देखता।

हालाँकि, आप अपनी इन-फाइल में निम्नलिखित जोड़ सकते हैं:

(require 'recentf)

(defun ido-recentf-open ()
  "Use `ido-completing-read' to find a recent file."
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))

(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

इसकी जगह पर आप C-x C-rहाल ही में खोली गई फाइलों के चयन के लिए बर्ड्स को पूरा करने के लिए प्रेस कर सकते हैं ।

डिफ़ॉल्ट रूप से, 20 सबसे हाल की फाइलें इतिहास में रखी जाएंगी। मेरा सुझाव है कि आप क्रैंक करें जैसे कि सेटिंग द्वारा 150 तक recentf-max-saved-items:

(setq recentf-max-saved-items 150)

बोनस: हाल की फाइलों तक पहुँचना, ऑन-स्टेरॉयड संस्करण

मैं इसे बहुत सी जगहों पर उल्लिखित नहीं देखता, लेकिन हाल ही की फाइलों तक पहुँचने के लिए बर्ड्स वर्चुअल बफ़र्स ने इसे सुपर आसान बना दिया । उन्हें ऐसा सक्षम करें:

(setq ido-use-virtual-buffers t)

आपको जो व्यवहार मिलता है वह यह है:

यदि गैर- nil, अतीत ("आभासी") बफ़र्स के साथ-साथ मौजूदा वाले को देखें।

अनिवार्य रूप से यह निम्नानुसार काम करता है: मान लें कि आप किसी फ़ाइल पर जा रहे हैं और बफर साफ हो जाता है midnight.el। बाद में, आप उस बफर पर स्विच करना चाहते हैं, लेकिन पाते हैं कि यह अब खुला नहीं है। वर्चुअल बफ़र्स सक्षम होने के साथ, बफर नाम बफर सूची में रहता है ( ido-virtualचेहरे का उपयोग करके , और हमेशा अंत में), और यदि आप इसे चुनते हैं, तो यह फ़ाइल को फिर से वापस खोलता है। यह आपको इस बारे में कम सोचने की अनुमति देता है कि क्या हाल ही में खोली गई फाइलें अभी भी खुली हैं या नहीं। अधिकांश समय आप Emacs को छोड़ सकते हैं, पुनरारंभ कर सकते हैं और फिर एक फ़ाइल बफर पर स्विच कर सकते हैं जो पहले खुला था जैसे कि यह अभी भी था।


अब तक मैंने उत्थान किया है, मैं बाद में स्वीकार करूंगा जब मैं इसका परीक्षण करूंगा और समझूंगा कि यह कैसे काम करता है। (लिस्प की मेरी समझ बहुत खराब है)।
WeISERASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers ज़रूर, अपना समय ले लो। मुझे बताएं कि क्या आपके पास मेरे द्वारा पोस्ट किए गए कोड के बारे में कोई विशिष्ट प्रश्न हैं।
itsjeyd

मैंने स्वीकार किया लेकिन स्पष्ट रूप से मुझे यह पसंद नहीं है क्योंकि इसके साथ C-x C-rनई फ़ाइल को खोलना संभव नहीं है। मुझे आश्चर्य है कि इसे सरल तरीके से अनुकूलित करना संभव नहीं है। का इतिहास C-x C-fइतनी स्पष्ट विशेषता है कि मैं समझ नहीं पा रहा हूं कि idoअभी तक इसे लागू क्यों नहीं किया गया है। उदाहरण के लिए M-x up/downहाल के आदेशों के M-% up/downमाध्यम से चक्र , हाल के प्रश्न के माध्यम से चक्रों को हटाते हैं, यहां तक ​​कि emacs के बाहर भी - सभी गोले जैसे कि बाश या zsh पिछले आदेशों को याद करने के लिए ऊपर / नीचे उपयोग करते हैं। मेरे लिए C-x C-f up/downहाल ही में खोली गई फ़ाइलों के माध्यम से साइकिल चलाना चाहिए। पूर्ण विराम।
WeISERASoulInSearchOfAnswers 13

@WeSenseASoulInSearchOfAnswers मैं आपसे सहमत हूं, और मुझे नहीं पता कि यह क्यों उपलब्ध नहीं है या बॉक्स से बाहर अनुकूलन योग्य है। मेरे लिए व्यक्तिगत रूप से, यह एक बड़ी बात नहीं है क्योंकि मैं अपने जवाब में वर्णित आभासी बफ़र्स सुविधा का उपयोग करता हूं, इसलिए हाल की फ़ाइल पर स्विच करना उसी तरह है जैसे किसी अन्य बफर पर स्विच करना; वास्तव में आसान। लेकिन मैं समझता हूं कि यह निराशाजनक हो सकता है यदि आपके द्वारा उपयोग की जाने वाली सुविधा उपलब्ध नहीं है।
इसका अजायबघर

5
+1 के लिए ido-use-virtual-buffers- एक शानदार विशेषता जो डिफ़ॉल्ट IMO द्वारा वास्तव में होनी चाहिए।
जॉन ओ।

2

हालाँकि समय के साथ बाइंडिंग विकसित हो गई है, आज के समय, जब आप इनवॉइस करते हैं ido-find-fileया ido-find-file-read-only, आप डिफ़ॉल्ट कॉन्फ़िगरेशन में उपलब्ध निम्नलिखित बाइंडिंग का उपयोग कर सकते हैं:

  • M-o का आह्वान ido-prev-work-file
  • C-M-o का आह्वान ido-next-work-file

इसके अलावा इन के रूप में ergonomically सुखद रूप में नहीं किया जा रहा M-pहै और M-nबाइंडिंग मैं प्रयास करने से पहले करने के लिए इस्तेमाल किया गया था Ido , वे भी धीमी गति से कर रहे हैं, और फलस्वरूप minibuffer बकवास ध्यान भंग और भ्रामक है। आईडीओ हाल ही में खोले गए फ़ाइल नाम से अधिक कुछ करता है; यह रिपोर्ट करता है कि यह " फ़ाइल नाम के लिए खोज" है ... ", शायद किसी फ़ाइल के लिए नाम प्रस्तुत करने की अनिच्छा से बाहर है जो अब मौजूद नहीं है।

"खोज के लिए" संदेश फ़ंक्शन से आता है ido-make-merged-file-listस्रोत को पढ़ते हुए , मुझे लगता है कि यह फ़ंक्शन जो भी जादू कर रहा है उसे अक्षम करने का कोई तरीका नहीं है।

आप ido-prev-work-fileऔर ido-next-work-fileजोड़ी को और अधिक प्राकृतिक C-M-pऔर जैसे C-M-n, या वर्तमान M-p( ido-prev-work-directory) और M-n( ido-next-work-directory) इन के लिए बाइंडिंग को स्वैप करने पर विचार कर सकते हैं ।

यहाँ बहाल करने के लिए Emacs लिस्प कोड है M-pऔर M-nहाल ही में फ़ाइलों के माध्यम से चक्र करने के लिए, करने के लिए डिफ़ॉल्ट निर्देशिका केंद्रित बाइंडिंग चलती C-M-pऔर C-M-nक्रमश:

(add-hook 'ido-setup-hook
          (lambda ()
            (let ((kmap ido-file-dir-completion-map))
              (let ((key '(meta ?n)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-next-work-file))
              (let ((key '(meta ?p)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-prev-work-file)))))

1
Emacs SE में आपका स्वागत है! कृपया अपने उत्तर मूल पोस्टर के प्रश्न पर केंद्रित रखने का प्रयास करें। निश्चित रूप से "मिनीबफ़र चटर" के बारे में आपकी टिप्पणी दिलचस्प और संबंधित है, लेकिन यह प्रश्न का वास्तविक उत्तर खोजने से विचलित करता है। इससे भी महत्वपूर्ण बात: कृपया अपने उत्तर को ... के रूप में, एक उत्तर के रूप में उद्धृत करने का प्रयास करें। आपने जो लिखा है वह एक टिप्पणी की तरह अधिक पढ़ता है, जो इस तरह से क्यू एंड ए साइट के लिए अच्छी तरह से अनुकूल नहीं है।
पेपरिका

खैर, पहला पैराग्राफ और इसकी निम्न सूची मूल प्रश्न का उत्तर देती है, जो हाल ही में खोली गई फ़ाइलों के माध्यम से चक्र की कुंजी की तलाश में था। वे बाइंडिंग डिफ़ॉल्ट रूप से मौजूद हैं, लेकिन यहां किसी भी अन्य उत्तर ने इन बाइंडिंग का उल्लेख नहीं किया है। मैं रीबाइंडिंग कोड पर काम कर रहा हूं, और इससे संतुष्ट होने के बाद मैं इसे अपने उत्तर में शामिल करूंगा।
सेह

2

इस मामले में मैंने जो सहारा लिया है वह आइडियल में Cf लिखकर वापस सामान्य मिनीबफ़र व्यवहार के लिए जा रहा है। तब आपके पास सामान्य इतिहास ब्राउज़िंग कुंजियाँ होंगी। यदि आप इसे पहले से जानते हैं, तो यह जल्दी हो सकता है: Cxff :-)


1

@Itsjeyd द्वारा दिया गया उत्तर बहुत पूर्ण है। मुझे सिर्फ एक समारोह का सुझाव दें:

(defun ido-choose-from-recentf ()
  "Use ido to select a recently visited file from the `recentf-list'"
  (interactive)
  (find-file (ido-completing-read "Open file: " recentf-list nil t)))

;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)

विकीमैक्स के सौजन्य से


1

मुझे helm-for-filesफ़ाइल नाम ऑटो-पूर्ति और अच्छा खोज इंटरफ़ेस रखने के उद्देश्य से उपरोक्त उत्तरों में से किसी से भी बेहतर काम मिला । इसके अलावा, आप इसे अपनी पसंद के किसी भी खोज आइटम को शामिल करने के लिए कॉन्फ़िगर कर सकते हैं।


1
@ ड्रू हेलम ही इडो मोड के साथ आता है। अधिकांश समय जब लोग इस पोस्ट को खोजते हैं तो वे समस्या को हल करने के लिए अन्य विकल्पों को जानने में दिलचस्पी ले सकते हैं।
user10375
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.