बहुविकल्पी विकल्प?


15

आम तौर पर, विकल्प के साथ एक cविकल्प मुझे दो विकल्प देता है: (y) es या (n) o। क्या कई चुनिंदा हां विकल्पों को चुनना संभव है?

उदाहरण

फ़ाइल

person: Alice
dog: Tobby
person: Bob

पैटर्न 1 :%s/person:/woman:/c

पैटर्न 2 :%s/person:/man:/c

पैटर्न 1 और 2 में एक ही खोज पैटर्न है, लेकिन विभिन्न प्रतिस्थापन पैटर्न हैं। मैं उन्हें प्रतिस्थापन 1 के लिए (1) दबाने के विकल्प के साथ एक पैटर्न में एकीकृत करना चाहता हूं, (2) प्रतिस्थापन 2 या (एन) के लिए कोई प्रतिस्थापन नहीं।

जवाबों:


19

का कार्यान्वयन :s//cतय है; जो आप खोज रहे हैं, वह विम्सस्क्रिप्ट अभिव्यक्ति ( :help sub-replace-expr) के साथ बदल रहा है। आप एकल अंकों को क्वेरी कर सकते हैं getchar(), या अधिक संख्याओं के लिए संकेत दे सकते हैं input():

:%s/person:/\=get(['woman', 'man'], getchar() - char2nr(1), submatch(0)) . ':'/
:%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/

आप 3कोई प्रतिस्थापन करने के लिए एक उच्च संख्या ( आपके उदाहरण में) दर्ज कर सकते हैं ।


यदि आपको अक्सर इसकी आवश्यकता होती है, तो इसके लिए एक कस्टम Query()फ़ंक्शन को परिभाषित करना समझ में आता है। वहां, आप एक भी जोड़ सकते हैं :redraw, ताकि आप उन प्रतिस्थापनों को देख सकें जो पहले ही हो चुके हैं।


आदेश समस्यात्मक लगता है। मेरे द्वारा जाँच की गई कमांड को जोड़ने के बाद ही यह काम करता है::%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/c
लर्नर झांग

लेकिन cकमांड जोड़ने के परिणामस्वरूप मुझे एक स्ट्रिंग को बदलने के लिए दो चरणों की आवश्यकता होगी, जो मुझे लगता है कि अनावश्यक है।
लेर्नर झांग

1

मेरे मूल प्रश्न के लिए सभी उत्थान के लिए धन्यवाद! मैंने अब :SubstituteChoicesअपने पैटर्न्सऑनटेक्स्ट प्लगइन में एक कमांड शामिल किया है , जो एक मजबूत कार्यान्वयन प्रदान करता है। प्रश्न में उदाहरण के माध्यम से हल किया जाएगा:

:%SubstituteChoices/person:/woman:/man:/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.