विम में रीमैप, नॉरमैप, न्नोरेमैप और वॉनरेमैप मैपिंग कमांड में क्या अंतर है?


1113

बीच क्या अंतर है remap, noremap, nnoremapऔर vnoremapविम में मानचित्रण आदेशों?


1
दृश्य और चयन मोड में सावधानी, vnoremapऔर vmapकाम। केवल दृश्य मोड में मैपिंग करने के लिए, का उपयोग करें xmapऔर xnoremap
बेनोइट

जवाबों:


1624

remapएक विकल्प है जो मैपिंग को पुनरावर्ती रूप से कार्य करता है। डिफ़ॉल्ट रूप से यह चालू है और मैं आपको इसे इस तरह छोड़ने की सलाह दूंगा। बाकी कमांड मैपिंग कर रहे हैं , नीचे वर्णित हैं:

:mapऔर :noremapकर रहे हैं पुनरावर्ती और गैर पुनरावर्ती विभिन्न मानचित्रण आदेशों के संस्करणों। इसका मतलब यह है कि यदि आप करते हैं:

:map j gg
:map Q j
:noremap W j

jको मैप किया जाएगा ggQको मैप भी किया जाएगा gg, क्योंकि jपुनरावर्ती मैपिंग के लिए विस्तारित किया जाएगा। गैर-पुनरावर्ती मैपिंग के लिए विस्तारित नहीं किया जाएगा क्योंकि (और नहीं ) Wमैप किया जाएगा।jggj

अब याद रखें कि विम एक मोडल एडिटर है । इसमें एक सामान्य मोड, विजुअल मोड और अन्य मोड हैं।

मैपिंग के इन सेटों में से प्रत्येक के लिए, एक मैपिंग है जो सामान्य, दृश्य, चयन और ऑपरेटर मोड ( :mapऔर :noremap) में काम करता है, एक जो सामान्य मोड ( :nmapऔर :nnoremap) में काम करता है , एक दृश्य मोड ( :vmapऔर :vnoremap) और इतने पर।

इस पर अधिक मार्गदर्शन के लिए, देखें:

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes

8
आपके उत्तर के लिए धन्यवाद! इसके अलावा, पुनरावर्ती का उपयोग कब किया जाता है, और गैर-पुनरावर्ती का उपयोग कब किया जाता है?
चेतन

14
@ चेतन: यह निर्भर करता है कि आप क्या हासिल करना चाहते हैं। मैं अधिक बार गैर-पुनरावर्ती का उपयोग करता हूं, लेकिन यदि आपने गैर-पुनरावर्ती का उपयोग करते हुए एक अपेक्षाकृत जटिल मानचित्रण को परिभाषित किया है और एक अन्य मानचित्रण जो पहली मैपिंग करता है और अधिक सब कुछ करता है, तो पुनरावर्ती मैपिंग का उपयोग करना आसान हो सकता है जिसमें शामिल हैं गैर-पुनरावर्ती को फिर से पूरा करने के बजाय मूल एक (फिर यदि आपको मूल एक को फिर से ट्विस्ट करने की आवश्यकता है)।
DrAl

10
मैं noremapकुछ विपरीत होने के लिए मानता था map। मेरा मतलब कुछ ऐसा है जो एक मैपिंग को हटा देता है। जवाब के लिए धन्यवाद। इसने मुझे स्पष्ट किया
पवन मंजुनाथ

4
यह उपयोग के मामलों के बहुमत के लिए महत्वपूर्ण नहीं है, लेकिन यह ध्यान दिया जाना चाहिए कि :map, आदि सभी मोड में काम नहीं करते हैं, बिल्कुल, बस सभी सामान्य (विशेष रूप से, सामान्य मोड, दृश्य मोड, चयन मोड, और) ऑपरेटर-लंबित मोड)। यदि आप इंसर्ट, कमांड-लाइन, या लैंग-आरजी मोड में काम करने के लिए मैपिंग चाहते हैं, तो आपको उपयोग करने की आवश्यकता है :map!, आदि (स्रोत: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
केन

3
@whytheq noremap = गैर-पुनरावर्ती मानचित्रण
Dan Bechard

281

मुझे लगता है कि विम डॉक्युमेंट में इन कमांड्स के नामकरण के पीछे का अर्थ समझाया जाना चाहिए। बस आपको बता रहा है कि वे क्या नाम याद रखने में आपकी मदद नहीं करते हैं।

mapसभी पुनरावर्ती मैपिंग आदेशों की "जड़" है। रूट फॉर्म "सामान्य", "दृश्य + चयन" और "ऑपरेटर-लंबित" मोड पर लागू होता है। (मैं "रूट" शब्द का प्रयोग भाषा विज्ञान के रूप में कर रहा हूं ।)

noremapसभी गैर-पुनरावर्ती मैपिंग आदेशों की "जड़" है। रूट रूप के समान मोड पर लागू होता है map। ( nore"गैर-पुनरावर्ती" का अर्थ उपसर्ग के बारे में सोचें ।)

(ध्यान दें कि ऐसे !मोड भी हैं map!जो डालने और कमांड-लाइन पर लागू होते हैं।)

इस संदर्भ में "पुनरावर्ती" का क्या अर्थ है, इसके लिए नीचे देखें।

मोड मोड को प्रीपेंड करना जैसे nमोड्स मैपिंग को संशोधित करता है। यह लागू मोड्स की सूची का एक सबसेट चुन सकता है (जैसे केवल "विज़ुअल"), या अन्य मोड चुनें जो mapलागू नहीं होंगे (जैसे "इन्सर्ट")।

उपयोग help map-modesआपको कुछ तालिकाएँ दिखाएगा जो बताती है कि मानचित्रण किस मोड पर लागू होता है, इसे कैसे नियंत्रित किया जाए।

मोड पत्र:

  • n: केवल सामान्य
  • v: दृश्य और चयन
  • o: ऑपरेटर-लंबित
  • x: केवल दृश्य
  • s: केवल चयन करें
  • i: डालें
  • c: कमांड लाइन
  • l: सम्मिलित करें, कमांड-लाइन, regexp-search (और अन्य। सामूहिक रूप से "Lang-Arg" छद्म-मोड कहा जाता है)

" पुनरावर्ती " का अर्थ है कि मानचित्रण का परिणाम में विस्तार किया जाता है, फिर परिणाम को दूसरे परिणाम तक विस्तारित किया जाता है, और इसी तरह।

जब इनमें से एक सत्य होता है, तो विस्तार रुक जाता है:

  1. परिणाम अब किसी और चीज़ के लिए मैप नहीं किया गया है।
  2. एक गैर-पुनरावर्ती मानचित्रण लागू किया गया है (यानी "नॉरमैप" [या इसका एक ilk] अंतिम विस्तार है)।

उस बिंदु पर, अंतिम परिणाम के विम के डिफ़ॉल्ट "अर्थ" को लागू / निष्पादित किया जाता है।

" गैर-पुनरावर्ती " का अर्थ है कि मानचित्रण केवल एक बार विस्तारित होता है, और उस परिणाम को लागू / निष्पादित किया जाता है।

उदाहरण:

 nmap K H
 nnoremap H G
 nnoremap G gg

उपरोक्त कारणों Kका विस्तार करना है H, फिर Hविस्तार करना Gऔर बंद करना है। इसकी वजह से रुक जाता है nnoremap, जो फैलता है और तुरंत रुक जाता है। का अर्थ Gनिष्पादित किया जाएगा (यानी "अंतिम पंक्ति पर जाएं")। कम से कम एक गैर-पुनरावर्ती मानचित्रण को कभी भी विस्तार श्रृंखला में लागू किया जाएगा (यह होने वाला अंतिम विस्तार होगा)।

की मैपिंग Gकरने के लिए ggही लागू होता है अगर आप प्रेस G, लेकिन नहीं करता है, तो आप प्रेस K। यह मैपिंग दबाव को प्रभावित नहीं करती Kहै चाहे Gवह पुनरावर्ती रूप से मैप की गई हो या नहीं, क्योंकि यह पंक्ति 2 है जिसके कारण विस्तार Kरुक जाता है, इसलिए पंक्ति 3 का उपयोग नहीं किया जाएगा।


4
एक बात: mapकेवल सामान्य, दृश्य, चयन और ऑपरेटर-लंबित मोड पर लागू होती है, सभी मोड पर नहीं।
ब्रायन मैककिनटन

1
उत्तर स्वीकार किया जाना चाहिए।
टाइकोलिज़

यह स्वीकृत की तुलना में एक बेहतर उत्तर है।
मिलिके

19

एक अंतर यह है कि:

  • :map करता nvo== सामान्य + (दृश्य + चयन) + ऑपरेटर लंबित
  • :map!करता है ic == सम्मिलित + कमांड-लाइन मोड

जैसा कि help map-modesतालिकाओं पर कहा गया है ।

तो: mapसभी मोड में मैप नहीं करता है

सभी साधनों तुम दोनों की जरूरत को मैप करने :mapऔर :map!


5
सावधान !! अर्थात के command modeलिए एक और ऐतिहासिक नाम है normal mode। अध्याय 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro )। संक्षिप्त नाम 'c' 'कमांड-लाइन' के लिए है।दूसरे शब्दों में, डिफ़ॉल्ट रूप से में: map! lhs rhs रिकर्सिवली के लिए आरएचएस को एलएचएस नक्शे डालने + कमांड लाइन मोड। यह तब तक है जब तक कि remapडिफ़ॉल्ट विकल्प set noremap[!]~ / .vimrc में स्पष्ट रूप से अक्षम न हो । उस मामले में मानचित्रण पुनरावर्ती (उचित नहीं) नहीं होगा।
Cbhihe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.