फ़ाइल के लिए Emacs स्थानीय चर में शेल संस्करण निर्दिष्ट करें


3

मैं उस फ़ाइल के Emacs स्थानीय चर में फ़ाइल के लिए शेल संस्करण को कैसे निर्दिष्ट कर सकता हूं, जब फ़ाइल एक स्टैंडअलोन प्रोग्राम नहीं है?

Emacs मुझे यह निर्दिष्ट करने की अनुमति देता है कि एक शेल शामिल फ़ाइल को shमोड में खोला जाना चाहिए , संपादक संकेत में एक स्थानीय चर सेट करके:

# Local variables:
# coding: utf-8
# mode: sh
# End:
# vim: fileencoding=utf-8 filetype=bash :

मैं विम को निर्दिष्ट कर सकता हूं कि फ़ाइल का शैल संस्करण विशेष रूप से बैश है, और यह संपादक बैश को विशिष्ट बैश सिंटैक्स हाइलाइटिंग प्रस्तुत करने के लिए मानता है। लेकिन Emacs में shमोड है जो सभी शेल वेरिएंट को कवर करता है।

Emacs ठीक से इस तरह की फाइल की व्याख्या करेगा यदि इसमें एक शेबंग लाइन (जैसे #! /bin/bash) है। लेकिन कुछ फाइलें स्टैंड-अलोन प्रोग्राम नहीं होती हैं, इसलिए मैं नहीं चाहता कि उन लोगों के पास एक शेबंग लाइन हो।

Emacs shमोड उन फ़ाइलों को Posix शेल सिंटैक्स के रूप में मानता है, जो वे नहीं हैं। shमोड में शेल सिंटैक्स के "संस्करण" की अवधारणा है; लेकिन मैं यह पता लगाने में असमर्थ हूं कि फ़ाइल के संपादक संकेत में निर्दिष्ट कैसे करें, फ़ाइल के लिए किस संस्करण का उपयोग करना है।

मैं Emacs को यह बताने के लिए फ़ाइल में संपादक संकेत कैसे सेट कर सकता हूं कि उसका सिंटैक्स बैश है?

अद्यतन 2014-04-24: मैंने इस लापता व्यवहार के लिए Emacs bug # 17333 की सूचना दी है।


bignose की बग रिपोर्ट तय हो गई है। तो अगले Emacs रिलीज़ (संभवतः 24.5) में, यह वास्तव sh-shellमें फ़ाइल-स्थानीय चर के रूप में सेट करना जितना आसान होगा । वाह! तब तक, नीचे दिया गया मेरा जवाब वास्तव में एक स्पष्ट शेबांग रेखा को जोड़ने के बिना काम करता है (इसके विपरीत, बिग्नेज़ की शुरुआती छाप नहीं है)।
बेन लिब्रिट

Bugnose की बग रिपोर्ट का फिक्स 25.1 Emacs में दिखाई देता है। NEWSफ़ाइल कहा गया है कि "श-मोड में आप अब उपयोग कर सकते हैं sh-shellका उपयोग करें (में खोल के प्रकार को निर्दिष्ट करने के लिए फ़ाइल-स्थानीय चर के रूप में bash, csh, आदि)।"
बेन लिब्लिट

जवाबों:


2

sh-modeकोड को देखते हुए , ऐसा लगता है कि किसी ने इसे फ़ाइल-स्थानीय चर के रूप में सेटिंग करके sh-shellया शायद अनुमति देने का इरादा किया हो sh-shell-file। न तो वास्तव में काम करता है, हालांकि। कृपया इसके बारे में अनुचर को एक बग रिपोर्ट प्रस्तुत करने पर विचार sh-modeकरें। यह वास्तव में ऐसा लगता है कि यह sh-shell: bashआपके फ़ाइल-लोकल वैरिएबल ब्लॉक में जोड़ना जितना आसान होना चाहिए , और यह मूल उद्देश्य भी हो सकता है, लेकिन यह सिर्फ काम नहीं करता है।

निम्नलिखित में से क्या काम करता है:

  1. अपनी फ़ाइल को कुछ समाप्ति नाम दें .bash

  2. जोड़े eval: (sh-set-shell "bash")आपकी फ़ाइल-स्थानीय चर ब्लॉक करने के लिए। डिफ़ॉल्ट रूप से Emacs एक चेतावनी देगा कि यह असुरक्षित कोड हो सकता है, हालांकि इसे अक्षम किया जा सकता है।


sh-set-shellआदेश गलत बात करता है: यह कहते हैं एक फ़ाइल है कि विशेष रूप से एक नहीं होना चाहिए करने के लिए, एक कुटिया लाइन।
bignose

sh-set-shellइंटरेक्टिवली, या नॉन- nilथर्ड तर्क के साथ केवल एक शेबंग लाइन जोड़ता है । जब मुझे ऊपर सुझाव दिया जाता है, तो यह एक शेबंग लाइन नहीं जोड़ता है। प्रयास करें और खुद देखें।
बेन लिब्लिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.