2010-04-09 28 views
9

विम में, मेरे .vimrc में, मैं एक आदेश को फिर से परिभाषित कैसे कर सकता हूं (यानी: ई) कुछ और के रूप में? मैं :e * को :tabe * के रूप में फिर से परिभाषित करना चाहता हूं।विम: कमांड को फिर से परिभाषित करें

उत्तर

10

मैं यह करने के लिए एक तरीका खोज निकाला। How to disable a built-in command in vim देखें। उस से, हम देख सकते हैं कि हम कमांड को बदलने के लिए cabbrev का उपयोग कर सकते हैं। मेरी जरूरतों के लिए, cabbrev e tabe सही है।

लेकिन हम उपयोगकर्ता द्वारा परिभाषित लोगों के लिए उपयोगकर्ताओं के लिए सुलभ निचले केस वर्णों से शुरू होने वाले आदेशों को कम करने के लिए इस समाधान को सामान्यीकृत कर सकते हैं: उपयोगकर्ता द्वारा परिभाषित एक अंतर्निहित कमांड को परिभाषित करने के लिए cabbrev (re) का उपयोग करें। इस प्रकार, हम अंतर्निहित कमांड के साथ-साथ उपयोगकर्ता परिभाषित लोगों को फिर से परिभाषित करने में सक्षम हैं।

:command -nargs=+ E :tabe "<args>" 
:cabbrev e E 

सब है कि:

यहाँ एक उदाहरण है, जो मेरी समस्या के लिए मेरे ऊपर उल्लिखित समाधान के बराबर है है।

+0

यदि आप टाइप करना चाहते हैं तो यह तोड़ता है: 'echo e f', जो इसके बजाय' echo e f' बन जाएगा। मेरा जवाब इस पर काबू पाने का प्रयास करता है। –

1

जैसा कि मैं इसे समझता हूं, आप नहीं कर सकते। उपयोगकर्ता परिभाषित कमांड में अपरकेस पहला अक्षर होना चाहिए।

:help :command 
अधिक जानकारी के लिए

3

है कि मैं अब तक देखा है एक प्लगइन के बिना सबसे अच्छा समाधान नहीं है:

cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e' 

आप एक सरल का उपयोग करते हैं:

cnoreabbrev e E 

रूप @Yktula ने सुझाव दिया अपने आदेश टूट जाएगा यदि आप करना चाहते हैं:

echo e f 

जो बन जाएगा:

echo E f 

इसके बजाए।

:Alias e tabe 

प्लगइन भी लिखने के समय को getcmdtype() == ":" तकनीक का उपयोग करता:


टिप्पणी में @pydave द्वारा समझाया, cmdalias plugin बस के रूप में सुरक्षित उर्फ ​​करने के लिए एक सरल अंतरफलक कहते हैं इसकी कार्यक्षमता को लागू करें।

+0

आप इसे [cmdalias] (http://www.vim.org/scripts/script.php?script_id=746) का उपयोग कर सकते हैं ताकि इसे सरल बनाया जा सके: 'एलियास ई टैब' और यह आपके लिए getcmdline जादू करेगा। – idbrii

संबंधित मुद्दे