मैप, नॉरमैप, एब्रीव और नॉरएब्रेव कमांड के बीच अंतर क्या हैं?


19

ये आदेश किसी न किसी तरह से कीस्ट्रोक्स के एक सेट को दूसरे में बदल देते हैं, लेकिन मैं कुछ फ़र्ज़ी हूं, जिस पर किसी स्थिति के लिए सबसे उपयुक्त है। इसके अलावा, वहाँ के !रूप में अच्छी तरह से कर रहे हैं। फिलहाल, मेरा उनका उपयोग बहुत ही घृणित है, इसलिए क्या मुझे पता है कि प्रत्येक के साथ जुड़े नुकसान क्या हैं? के बाद से मैं पीटर Rincker से सीखा विभिन्न मोड संस्करणों के बारे में विशेष रूप से नोट में, उपयोगी हो सकता है एक टिप्पणी में है कि cmapलाइन में काफी कहीं भी विस्तार कर सकते हैं और न केवल जब मैं उपयोग कर रहा हूँ :आदेशों। संभावित नुकसान के खिलाफ मैं क्या सावधानियां बरत सकता हूं?


अगला भाग थोड़ा मेटा है: इस साइट पर उत्तर देते समय हमें किस फॉर्म का उपयोग करना चाहिए? - क्या मुझे मेटा पर यह पूछना चाहिए, या इसे प्रश्न में जोड़ना चाहिए?
मूरू

मैं कहूंगा कि यह निर्भर करता है। यदि मैपिंग का प्रदर्शन किया जाता है तो मैं हमेशा नॉरमैप संस्करण का उपयोग करूंगा। इस तरह, लोग पुनरावर्ती संस्करणों पर गैर-पुनरावर्ती मैपिंग का उपयोग करने की आदत डालते हैं। जब तक बेशक, विशेष रूप से मानचित्र का उपयोग करने का एक कारण है, उदाहरण के लिए, एक <प्लग> मैपिंग में।
अक्षय

जवाबों:


21

सबसे पहले, mapऔर noremapइसमें समान हैं कि प्रत्येक सामान्य, दृश्य, चयन और ऑपरेटर लंबित मोड के लिए एक साथ मैपिंग बनाते हैं । विम विवरण में यह :help map-overview:

Overview of which map command works in which mode.  More details below.
     COMMANDS                    MODES ~
:map   :noremap  :unmap     Normal, Visual, Select, Operator-pending
:nmap  :nnoremap :nunmap    Normal
:vmap  :vnoremap :vunmap    Visual and Select
:smap  :snoremap :sunmap    Select
:xmap  :xnoremap :xunmap    Visual
:omap  :onoremap :ounmap    Operator-pending
:map!  :noremap! :unmap!    Insert and Command-line
:imap  :inoremap :iunmap    Insert
:lmap  :lnoremap :lunmap    Insert, Command-line, Lang-Arg
:cmap  :cnoremap :cunmap    Command-line

उपरोक्त सहायता के अनुसार, यदि आप मानचित्रण को एक विशिष्ट मोड तक सीमित रखना चाहते हैं, तो आपको पहले से प्रस्तुत करना होगा:

'एन' (सामान्य के लिए), 'वी' (दृश्य और चयन के लिए), 'सी' (कमांड के लिए), 'एक्स' (विजुअल मोड के लिए), 'एस' (चयन के लिए), 'ओ' (ऑपरेटर के लिए लंबित) )।

उदाहरण के लिए,

nmap n nzz

एक सामान्य मोड बनाएगा, की पुनरावर्ती मैपिंग n

अब, noremapका केवल गैर-पुनरावर्ती संस्करण है map

तो गैर-पुनरावर्ती मानचित्रण क्या है? विम के पास इसका उत्तर भी है :help map-recursive:

If you include the {lhs} in the {rhs} you have a recursive mapping.  When
{lhs} is typed, it will be replaced with {rhs}.  When the {lhs} which is
included in {rhs} is encountered it will be replaced with {rhs}, and so on.
This makes it possible to repeat a command an infinite number of times.  The
only problem is that the only way to stop this is by causing an error.  The
macros to solve a maze uses this, look there for an example.  There is one
exception: If the {rhs} starts with {lhs}, the first character is not mapped
again (this is Vi compatible).
For example: >
   :map ab abcd
will execute the "a" command and insert "bcd" in the text.  The "ab" in the
{rhs} will not be mapped again.

इसका एक उदाहरण निम्नलिखित मानचित्रण है:

:imap j k

:imap k j

अब, v, j की जगह k और k को j के साथ अनंत बार जोड़ देगा, और इसलिए आपको एक त्रुटि दिखाएगा कि आपने एक पुनरावर्ती मैपिंग बनाई है।

यही कारण है कि आम तौर पर यह सिफारिश की जाती है कि आप लगभग हमेशा (सिवाय जब आपके पास <Plug>मैपिंग या समान है) गैर-पुनरावर्ती मैपिंग का उपयोग करें। जब आप अनजाने में पुनरावर्ती मैपिंग बनाते हैं तो यह Vim हैंग होने से रोकता है। इसलिए गैर-पुनरावर्ती मैपिंग विम में कमांड मैप करने का अधिक सुरक्षित तरीका है।

हाथ में उपरोक्त जानकारी के साथ, हम देख सकते हैं कि कमांड :noreabbrevका सिर्फ गैर-पुनरावर्ती संस्करण है :abbrev

आप :abbrevकेवल डालने, बदलने और कमांड मोड में उपयोग कर सकते हैं । :abbrevसंक्षिप्तिकरण बनाने के लिए उपयोग किया जाता है, (उर्फ शॉर्टकट जो विम का विस्तार कर सकता है)। संक्षिप्त विस्तार का उपयोग :map/ :noremapमैपिंग बनाने के लिए, :abbrev/ :noreabbrevसंक्षिप्त बनाने के लिए, या जब भी आप अपने टाइपिंग का विस्तार करना चाहते हैं।


1
हैंग से बचना noreमैप कमांड के रूपों का उपयोग करने का एकमात्र कारण नहीं है । उनके उपयोग के लिए एक और (और मेरी राय में, अधिक महत्वपूर्ण) कारण यह है कि वे आपकी मैपिंग को विश्वसनीय / पूर्वानुमान योग्य बनाते हैं। यदि आप सादे रूप का उपयोग करते हैं और rhsइसमें एक कुंजी शामिल होती है जो किसी और चीज़ से मैप की जाती है, तो आपकी मैपिंग में इच्छित से भिन्न व्यवहार हो सकता है।
रिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.