वास्तव में, यह समस्या बार वर्ण के विशेष उपचार मैपिंग-निर्माण आदेशों के कारण होती है।
विम में कुंजी मैपिंग तंत्र कुंजी प्रेस के अनुक्रम बनाने का एक तरीका है कुंजी के दूसरे अनुक्रम के रूप में व्याख्या करने के लिए; की कोई अर्थपूर्ण व्याख्या इस स्तर पर विम-स्क्रिप्ट भाषा नहीं की जाती है। मैपिंग बनाने के बाद से यह के बीच मैपिंग के बीच मैपिंगके बीच दोनों कुंजी-अनुक्रम तर्कों को अलग करने के लिए आवश्यक है- की सीमाओं को निर्धारित करने के लिए इन दो तर्कों को निर्धारित करके प्रारंभ करें। मैपिंग में प्रक्रिया में हस्तक्षेप करने वाले वर्णों का उपयोग करने के लिए, किसी को उस वर्णों (जिनमें कैरिज रिटर्न, स्पेस, बैकस्लैश और बार) के लिए प्रदान किए गए एस्केपिंग सिंटैक्स का उपयोग करना होगा।
क्योंकि बार चरित्र अगले पूर्व आदेश से एक मानचित्रण आदेश अलग करने के लिए, और इस प्रकार मानचित्रण के दाएँ हाथ की ओर से न खत्म होने वाली सीमा को परिभाषित करने के लिए किया जा सकता है, यह के रूप में है नहीं किया जा सकता एक महत्वपूर्ण अनुक्रम। :help map_bar
के अनुसार, सेटिंग के आधार पर, एक बार चरित्र भाग निकले हो सकता है <bar>
, \|
, या ^V|
के रूप में (जहां ^V
को दर्शाता है शाब्दिक Ctrl +वी कुंजी कोड)।
ध्यान में रखते हुए कि, हमें विचाराधीन मैपिंग ( \|
/\\|
भाग के आसपास) जिस तरह से वे डिफ़ॉल्ट कॉन्फ़िगरेशन में व्याख्या कर रहे हैं अनुसरण करने दें। में पहली मैपिंग, \|
अनुक्रम को एक |
वर्ण के रूप में माना जाता है। इसलिए, के बाद कि मानचित्रण आदेश निष्पादित किया जाता है, दबाने t
ही टाइपिंग
:call search('\m\(a|b\)', 'W')
दर्ज
जब दूसरे मानचित्रण आदेश चला जाता है, \\|
स्ट्रिंग के रूप में व्याख्या की है के रूप में किया जाएगा एक शाब्दिक बैकस्लैश चरित्र ( में मैपिंग के दाएं हाथ की तरफ, नेस्टेड वाले को छोड़कर) से बचने की आवश्यकता नहीं है) \|
विनिर्देशक एक बार चरित्र का प्रतिनिधित्व करता है। तो, यह आदेश नक्शे को t
निम्नलिखित:
:call search('\m\(a\|b\)', 'W')
मैपिंग में
हालांकि, दर्ज करें जब एक प्रकार मैप की खोज कमांड लाइन मोड में कहता है, कुंजी दृश्यों के विपरीत, वे तुरंत पूर्व आदेश के रूप में व्याख्या की जाती है। उन बार वर्ण स्ट्रिंग अक्षर में होते हैं, इसलिए की संभावना नहीं है कि उन्हें पूर्व आदेशों के लिए विभाजक के रूप में गलत व्याख्या करें। जब सीधे टाइप किया गया, आदेशों को निष्पादन के रूप में भेजा जाता है जैसा कि वे लिखे गए हैं। इस प्रकार, अंतर उनके बीच काम में नियमित अभिव्यक्ति \m\(a\|b\)
और \m\(a\\|b\)
के अर्थ के कारण हैं, कुछ बचने के व्यवहार के कारण नहीं।
इसे साफ़ करने के लिए धन्यवाद। मैंने निश्चित रूप से अनदेखा किया कि कैसे:: map' आदेशों को उनके तर्कों को बिना किसी सामग्री के देखे बिना उनके तर्कों को पार्स करना है। – Ein