शेल-स्क्रिप्ट मोड में '<<<' टाइप करने के बजाय '<< EOF \ n <' क्यों होता है?


13

जब भी मैं emacs में एक शेल स्क्रिप्ट संपादित कर रहा हूं और एक कच्चे स्ट्रिंग को स्टड पर रीडायरेक्ट करने के लिए तीन शेवरॉन टाइप करता हूं, emacs अक्षर 'EOF' और उनके बीच एक नई लाइन सम्मिलित करता है, इसलिए

cat <<< 'some string'

हो जाता है

cat <<EOF
< 'some string'

मैं वापस जा सकता हूं और राज्य में बफर को प्राप्त करने के लिए अतिरिक्त वर्णों को हटा सकता हूं, लेकिन यह बहुत ही अप्रिय व्यवहार है, और यह केवल शेल-स्क्रिप्ट मोड में होता है, जो आमतौर पर एकमात्र समय है जब मैं इस पैटर्न को टाइप करता हूं। क्या इस व्यवहार को अक्षम करने का कोई तरीका है?

जवाबों:


13

इसके कारण होता है sh-electric-here-document-mode। सक्षम होने पर, <<यहां एक दस्तावेज़ कंकाल डालेंगी।

यह डिफ़ॉल्ट रूप से सक्षम है। आप इसे हुक के साथ अक्षम कर सकते हैं, जैसे:

(add-hook 'sh-mode-hook (lambda () (sh-electric-here-document-mode -1)))

4
पाठ्यक्रम का एक और विकल्प के <<<साथ सम्मिलित करना है C-3 <
ग्लूकोज

1
इसे बंद करने का तरीका दिखाने के लिए धन्यवाद। यह श-इलेक्ट्रिक-यहाँ-दस्तावेज़-मोड एक बेकार सुविधा है, IMO।
डैन मोल्डिंग

भी: sh-mode-hookमेरे लिए काम नहीं किया, लेकिन sh-set-shell-hookकिया।
फेलिप लीमा

17

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

यह सलाह, sh-electric-here-document-modeसक्षम के साथ युग्मित , इसे ऐसा बनाएं कि यदि आप दो शेवरॉन टाइप करते हैं तो स्वचालित यहां डॉक्टर बनाया जाएगा, लेकिन फिर यदि आप जो अगला अक्षर टाइप करते हैं वह एक और शेवरॉन है, तो यह वापस आ जाएगा और आपको बस <<< के साथ छोड़ दिया जाएगा।

(defadvice sh--maybe-here-document (around be-smart-about-it activate)
  "Do normal here doc auto insert, but if you type another chevron, revert and leave just <<<."
  (if (and (= (current-column) 1)
           (looking-back "^<")
           (looking-at "\nEOF")
           (save-excursion
             (forward-line -1)
             (end-of-line 1)
             (looking-back "<<EOF")))
      (progn (delete-region (search-backward "EOF") (search-forward "EOF" nil t 2))
             (insert "<"))
    ad-do-it))

बेशक यह मतलब है कि यदि आप वास्तव में एक शेवरॉन के साथ एक यहाँ डॉक शुरू करना चाहते हैं, आप इसे डालने कच्चे करने की आवश्यकता होगी की C-q<। तो यह इस बात पर निर्भर करता है कि आप क्या अधिक करते हैं, यदि आप यहाँ डॉक्स की तुलना में अधिक स्ट्रिंग्स करते हैं, तो यह अच्छा हो सकता है, भले ही आप न करें, यह दुर्लभ है कि आप यहाँ एक शेवरॉन के साथ डॉक शुरू करना चाहते हैं और असुविधा हो।

यहाँ छवि विवरण दर्ज करें


आह, यह अच्छा है!
ग्लूकोज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.