क्या मेरी आरसी फाइल में कस्टम "सेट" कमांड बनाना और उन्हें एक मॉडल से कॉल करना संभव है?


10

मैंने हाल ही में एक प्रश्न पूछा था जिसमें मैंने सीखा था कि :setविम मॉडल में मापदंडों को छोड़कर कुछ भी पारित करना संभव नहीं है । मैं सुरक्षा चिंताओं को समझता हूं, लेकिन मैं सोच रहा हूं कि क्या इसके आसपास कोई दूसरा रास्ता नहीं है। एसओ पर हाल ही में एक कोडिंग मानक का पालन करने के लिए मापदंडों के बड़े बैचों को स्थापित करने के बारे में एक सवाल मुझे सोचने के लिए मिला- क्या मेरी आरसी फ़ाइल में चीजों के "समूह" को परिभाषित करना संभव होगा जो मॉडलइन से चालू या बंद किया जा सकता है?

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

set_function! codestyle()
    if &1 == 'psr-2'
        set ts=4
        set sw=4
    endfi
    if &1 == 'drupal7'
        set ts=2
        set sw=2
        iab D8 Drupal 8
    endif
endset_function

इसके बाद इस तरह के एक मॉडल द्वारा ट्रिगर किया जा सकता है

# vim: codestyle=psr-2

यह कुछ प्रकार से फ़ाइल प्रकार मिलान के समान होगा, लेकिन मैनुअल ओवरराइड की अनुमति देता है। यह अन्य पूर्व-परिभाषित तरीकों से पर्यावरण की स्थापना भी करेगा, एक फ़ाइल चलाने की सुरक्षा के मुद्दों को व्यर्थ में अन्य मनमाना आदेश चलाने से परहेज करता है, लेकिन अधिक अनुकूलित वातावरण की अनुमति देता है। क्या इसे करने का कोई तरीका है?


इसके लिए अपने स्वयं के विकल्प को परिभाषित करने की आवश्यकता होगी set; AFAIK, यह विम में संभव नहीं है ...
मार्टिन टूरनोइज

@Carpetsmoker का मतलब है कि इस प्रश्न का उत्तर यह है कि vimscript आवरण या अन्यथा निर्मित कार्यों का विस्तार नहीं कर सकती है?
कालेब

जवाबों:


10

आपके पास कुछ विकल्प हैं।

  1. पहला एक: आप अपनी तरह का मॉडलाइन डिकोडर, यानी एक प्लगइन लिख सकते हैं। यह उसी तरह का उत्तर है जैसा मैंने आपके अन्य प्रश्न के लिए दिया था।

    वास्तव में, हम नए vim विकल्प नहीं जोड़ सकते हैं (जो इसके साथ सेट किए जा सकते हैं :set), लेकिन हम नए चर जोड़ सकते हैं। और हम vim विकल्प सेट करने से अधिक करने के लिए मानक मॉडल का उपयोग नहीं कर सकते हैं।

  2. दूसरी संभावना: एक फ़ंक्शन या किसी अन्य को कॉल करने के लिए कॉलबैक सुविधा के माध्यम से लेट-मॉडलाइन का शोषण किया जा सकता है । आप अपने फ़ंक्शन को अपने या एक (ऑटोलॉड?) प्लगइन में रख सकते हैं , फिर आपकी फ़ाइलों में शामिल हैं:CodeStyle().vimrc

    # VIM: let b:codestyle='psr-2' b:ModeLine_CallBack='CodeStyle'
    

    लेकिन अगर आपकी जरूरत यह सटीक है और यदि आप वास्तव में local_vimrc जैसे प्लगइन्स नहीं चाहते हैं , तो अपने खुद के मॉडल -जैसे डिकोडर लिखें।

  3. तीसरा, और IMO, उस मामले में बेहतर विकल्प होगा कि एक नए फाइलाइप को परिभाषित किया जाए और 'ft'मॉडल में इस फाइलपेट को सेट किया जाए # vim: set ft=php.psr2phpवैश्विक सामान्य फ़ाइल प्रकार होने के साथ (मैं इस बारे में निश्चित नहीं हूं), और psr2विशिष्ट फ़ाइलप्रकार होने के नाते जो आपकी कोडिंग शैलियों के अनुरूप होगा। आपको दो फुटप्लगिन्स को परिभाषित करना होगा: ftplugin / psr2.vim और और ftplugin / drupal7.vim जहां आप अपनी कॉल :setlocal(और नहीं :set) डालेंगे ।


6
विकल्प के लिए अपवर्तित 3. मुझे लगता है कि यह सबसे अधिक उपयुक्त और विम-उपयुक्त दृष्टिकोण है।
टोमकोडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.