जवाबों:
remapएक विकल्प है जो मैपिंग को पुनरावर्ती रूप से कार्य करता है। डिफ़ॉल्ट रूप से यह चालू है और मैं आपको इसे इस तरह छोड़ने की सलाह दूंगा। बाकी कमांड मैपिंग कर रहे हैं , नीचे वर्णित हैं:
:mapऔर :noremapकर रहे हैं पुनरावर्ती और गैर पुनरावर्ती विभिन्न मानचित्रण आदेशों के संस्करणों। इसका मतलब यह है कि यदि आप करते हैं:
:map j gg
:map Q j
:noremap W j
jको मैप किया जाएगा gg। Qको मैप भी किया जाएगा gg, क्योंकि jपुनरावर्ती मैपिंग के लिए विस्तारित किया जाएगा। गैर-पुनरावर्ती मैपिंग के लिए विस्तारित नहीं किया जाएगा क्योंकि (और नहीं ) Wमैप किया जाएगा।jggj
अब याद रखें कि विम एक मोडल एडिटर है । इसमें एक सामान्य मोड, विजुअल मोड और अन्य मोड हैं।
मैपिंग के इन सेटों में से प्रत्येक के लिए, एक मैपिंग है जो सामान्य, दृश्य, चयन और ऑपरेटर मोड ( :mapऔर :noremap) में काम करता है, एक जो सामान्य मोड ( :nmapऔर :nnoremap) में काम करता है , एक दृश्य मोड ( :vmapऔर :vnoremap) और इतने पर।
इस पर अधिक मार्गदर्शन के लिए, देखें:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremapकुछ विपरीत होने के लिए मानता था map। मेरा मतलब कुछ ऐसा है जो एक मैपिंग को हटा देता है। जवाब के लिए धन्यवाद। इसने मुझे स्पष्ट किया
:map, आदि सभी मोड में काम नहीं करते हैं, बिल्कुल, बस सभी सामान्य (विशेष रूप से, सामान्य मोड, दृश्य मोड, चयन मोड, और) ऑपरेटर-लंबित मोड)। यदि आप इंसर्ट, कमांड-लाइन, या लैंग-आरजी मोड में काम करने के लिए मैपिंग चाहते हैं, तो आपको उपयोग करने की आवश्यकता है :map!, आदि (स्रोत: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
मुझे लगता है कि विम डॉक्युमेंट में इन कमांड्स के नामकरण के पीछे का अर्थ समझाया जाना चाहिए। बस आपको बता रहा है कि वे क्या नाम याद रखने में आपकी मदद नहीं करते हैं।
mapसभी पुनरावर्ती मैपिंग आदेशों की "जड़" है। रूट फॉर्म "सामान्य", "दृश्य + चयन" और "ऑपरेटर-लंबित" मोड पर लागू होता है। (मैं "रूट" शब्द का प्रयोग भाषा विज्ञान के रूप में कर रहा हूं ।)
noremapसभी गैर-पुनरावर्ती मैपिंग आदेशों की "जड़" है। रूट रूप के समान मोड पर लागू होता है map। ( nore"गैर-पुनरावर्ती" का अर्थ उपसर्ग के बारे में सोचें ।)
(ध्यान दें कि ऐसे !मोड भी हैं map!जो डालने और कमांड-लाइन पर लागू होते हैं।)
इस संदर्भ में "पुनरावर्ती" का क्या अर्थ है, इसके लिए नीचे देखें।
मोड मोड को प्रीपेंड करना जैसे nमोड्स मैपिंग को संशोधित करता है। यह लागू मोड्स की सूची का एक सबसेट चुन सकता है (जैसे केवल "विज़ुअल"), या अन्य मोड चुनें जो mapलागू नहीं होंगे (जैसे "इन्सर्ट")।
उपयोग help map-modesआपको कुछ तालिकाएँ दिखाएगा जो बताती है कि मानचित्रण किस मोड पर लागू होता है, इसे कैसे नियंत्रित किया जाए।
मोड पत्र:
n: केवल सामान्यv: दृश्य और चयनo: ऑपरेटर-लंबितx: केवल दृश्यs: केवल चयन करेंi: डालेंc: कमांड लाइनl: सम्मिलित करें, कमांड-लाइन, regexp-search (और अन्य। सामूहिक रूप से "Lang-Arg" छद्म-मोड कहा जाता है)" पुनरावर्ती " का अर्थ है कि मानचित्रण का परिणाम में विस्तार किया जाता है, फिर परिणाम को दूसरे परिणाम तक विस्तारित किया जाता है, और इसी तरह।
जब इनमें से एक सत्य होता है, तो विस्तार रुक जाता है:
उस बिंदु पर, अंतिम परिणाम के विम के डिफ़ॉल्ट "अर्थ" को लागू / निष्पादित किया जाता है।
" गैर-पुनरावर्ती " का अर्थ है कि मानचित्रण केवल एक बार विस्तारित होता है, और उस परिणाम को लागू / निष्पादित किया जाता है।
उदाहरण:
nmap K H
nnoremap H G
nnoremap G gg
उपरोक्त कारणों Kका विस्तार करना है H, फिर Hविस्तार करना Gऔर बंद करना है। इसकी वजह से रुक जाता है nnoremap, जो फैलता है और तुरंत रुक जाता है। का अर्थ Gनिष्पादित किया जाएगा (यानी "अंतिम पंक्ति पर जाएं")। कम से कम एक गैर-पुनरावर्ती मानचित्रण को कभी भी विस्तार श्रृंखला में लागू किया जाएगा (यह होने वाला अंतिम विस्तार होगा)।
की मैपिंग Gकरने के लिए ggही लागू होता है अगर आप प्रेस G, लेकिन नहीं करता है, तो आप प्रेस K। यह मैपिंग दबाव को प्रभावित नहीं करती Kहै चाहे Gवह पुनरावर्ती रूप से मैप की गई हो या नहीं, क्योंकि यह पंक्ति 2 है जिसके कारण विस्तार Kरुक जाता है, इसलिए पंक्ति 3 का उपयोग नहीं किया जाएगा।
mapकेवल सामान्य, दृश्य, चयन और ऑपरेटर-लंबित मोड पर लागू होती है, सभी मोड पर नहीं।
एक अंतर यह है कि:
:map करता nvo== सामान्य + (दृश्य + चयन) + ऑपरेटर लंबित:map!करता है ic == सम्मिलित + कमांड-लाइन मोडजैसा कि help map-modesतालिकाओं पर कहा गया है ।
तो: mapसभी मोड में मैप नहीं करता है ।
सभी साधनों तुम दोनों की जरूरत को मैप करने :mapऔर :map!।
command modeलिए एक और ऐतिहासिक नाम है normal mode। अध्याय 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro )। संक्षिप्त नाम 'c' 'कमांड-लाइन' के लिए है।दूसरे शब्दों में, डिफ़ॉल्ट रूप से में: map! lhs rhs रिकर्सिवली के लिए आरएचएस को एलएचएस नक्शे डालने + कमांड लाइन मोड। यह तब तक है जब तक कि remapडिफ़ॉल्ट विकल्प set noremap[!]~ / .vimrc में स्पष्ट रूप से अक्षम न हो । उस मामले में मानचित्रण पुनरावर्ती (उचित नहीं) नहीं होगा।
vnoremapऔरvmapकाम। केवल दृश्य मोड में मैपिंग करने के लिए, का उपयोग करेंxmapऔरxnoremap।