मैं टैब पूरा होने के लिए आइवी का उपयोग करने के लिए कैसे सेटअप कर सकता हूं?


16

मुझे ivyपूरा करने और प्यार करने का बहुत शौक है कि एक साधारण लगभग हर जगह (ivy-mode 1)पाने के लिए पर्याप्त ivyहै कि एमएसीएस किसी तरह का पूरा होने का उपयोग करता है (जो कि ओवरराइडिंग द्वारा अपूर्ण है completeing-read, मुझे विश्वास है)। लेकिन यह टैब पूरा करने के eshellलिए उपयोग करने के लिए सेटअप नहीं करता है ivy। मुझे eshellपूरा होने वाले उम्मीदवारों की सूची पसंद है, लेकिन ivyउनमें से यूआई चुनना पसंद करेंगे। क्या किसी भी तरह से पुन: उपयोग किया जाता है जो eshellपूरा करने वाले उम्मीदवारों का उत्पादन करता है और जो 'आइवी' को सौंप देता है?

जवाबों:


11

यह ठीक काम करना चाहिए:

(define-key eshell-mode-map (kbd "<tab>") 'completion-at-point)

मुझे नहीं पता कि ऊपर डिफ़ॉल्ट क्यों नहीं है। लेकिन मैं केवल shell-modeऔर term-modeवैसे भी उपयोग करता हूं ।


3
आपको शायद जोड़ना चाहिए कि (add-hook 'eshell-mode-hook '(lambda ()इसके चारों ओर लपेटने की आवश्यकता है।
टिम्म ऑक्ट

धन्यवाद, यह मेरे द्वारा की गई तुलना में थोड़ी सी बात है। डिफ़ॉल्ट रूप से इसका कारण शायद यह नहीं है कि अतीत में किसी बिंदु पर किसी pcompleteने मानक पूरा करने वाले UI पर पसंद किया था।
उमर

6

मुझे ऐसा कुछ मिला जो प्रारंभिक परीक्षण पर ठीक काम करता है: अनिवार्य रूप से विद्रोही <tab> करने के लिए pcomplete-std-complete, लेकिन चूंकि यह फ़ंक्शन किसी कारण से इंटरैक्टिव नहीं है, इसलिए आपको इसे लपेटने की आवश्यकता है:

(define-key eshell-mode-map (kbd "<tab>")
  (lambda () (interactive) (pcomplete-std-complete)))

pcompete-std-completepcompleteमानक पूर्ण UI के साथ लिखे गए पूर्णताओं का उपयोग करने कोशिश करता है , जो ivyडिफ़ॉल्ट रूप से ओवरराइड करेगा (बहुत हालिया अपडेट के साथ, वे बिंदु के पास एशेल बफर में एक अच्छे ओवरले में दिखाई देते हैं!)।

के स्रोत कोड में टिप्पणियाँ pcomplete-completions-at-point (जो pcomplete-std-completeनिर्भर करती है) कुछ संभावित समस्याओं का उल्लेख करती है:

;; FIXME: it only completes the text before point, whereas the
;; standard UI may also consider text after point.
;; FIXME: the `pcomplete' UI may be used internally during
;; pcomplete-completions and then throw to `pcompleted', thus
;; imposing the pcomplete UI over the standard UI.

मुझे लगता है कि पहला मुझे प्रभावित नहीं करेगा, क्योंकि मुझे नहीं लगता कि मैं <tab>इनपुट लाइन के अंत को छोड़कर कभी प्रेस करता हूं । मैंने अब तक दूसरी समस्या की सतह को नहीं देखा है।

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

(add-hook 'eshell-mode-hook
  (lambda () 
    (define-key eshell-mode-map (kbd "<tab>")
      (lambda () (interactive) (pcomplete-std-complete)))))

इससे पहले कि आप मुझ पर बेकार कीबाइंडिंग-इन-हुक एंटीपैटर्न के लिए चिल्लाएं, मुझे समझाएं कि एशेल अपने कीमैप की घोषणा (defvar eshell-mode-map nil)करता है और फिर (setq-local eshell-mode-map (sparse-keymap))अंदर करता है eshell-mode! (कोड में एक सहायक है ;; FIXME: What the hell!?।) इसका मतलब है कि आप eshell-modeरन के बाद तक कुंजियों को रिबंड नहीं कर सकते हैं ! इसलिए हुक।


इसके अलावा, मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे लगता है कि यदि helmयह पहले से ही eshellटैब को पूरा करने में अपना रास्ता नहीं बनाता है , तो यह फिक्स भी लागू होता है helm
उमर

यह बहुत साफ है :) टिप के लिए धन्यवाद
चक्रवर्ती रघुनंदन

यह "वह क्या है?!" टिप्पणी ने मेरा दिन बना दिया :) इसके अलावा, मैं यह नोट करना चाहूंगा कि यह अन्य पूर्ण रूपरेखाओं के लिए भी काम करना चाहिए, जैसे पतवार।
GergelyPolonkai
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.