2011-12-13 12 views
10

में एसीसी और कर्सर कुंजियों को कैसे अक्षम करें एक राय है कि विम में काम करते समय आपको एएससी कुंजी का उपयोग नहीं करना चाहिए (इसके बजाय ctrl + c का उपयोग करें) और तीर कुंजियों का उपयोग न करें (एच, जे, के, एल का उपयोग करें) आप कीबोर्ड पर। लेकिन उन चाबियों का उपयोग नहीं करना मुश्किल है। मैंने सोचा कि उन कुंजी को .vimrc में अक्षम करने का एक तरीका है, इसलिए ctrl + c और hjkl का उपयोग करने के अलावा कोई अन्य विकल्प नहीं होगा।विम

मैंने थोड़ा सा खोज किया है और इस link पर समाधान मिला है। तो मैं अपने .vimrc फ़ाइल में निम्न डाला है:

inoremap <Up>  <NOP> 
inoremap <Down> <NOP> 
inoremap <Left> <NOP> 
inoremap <Right> <NOP> 
inoremap <Esc> <NOP> 
noremap <Up>  <NOP> 
noremap <Down> <NOP> 
noremap <Left> <NOP> 
noremap <Right> <NOP> 
noremap <Esc> <NOP> 

लेकिन यह काम नहीं करता। इसे मेरे .vimrc में जोड़ने से फ़ंक्शन कुंजियों में मेरी मैपिंग टूट जाती है। एक और समस्या यह है कि यह तीर कुंजियों के कार्य को अवरुद्ध नहीं करता है, बल्कि जब मैं सामान्य मोड में दबाता हूं तो कई क्रियाएं की जाती हैं - कर्सर एक पंक्ति ऊपर जाता है, नई रेखा बनाई जाती है और चरित्र 'बी' डाला जाता है।

मैं अपने vim 7.2 में कर्सर कुंजी और Esc कुंजी को और कुछ तोड़ने के बिना कैसे अक्षम कर सकता हूं?

+8

हालांकि कि राय हो सकती है, कि राय बस गलत है। 'Ctrl-c' 'Esc' या' Ctrl- [' do 'जैसा ही काम नहीं करता है। आप इसे पहले से ही समझ सकते हैं, लेकिन अगर कोई इसे पढ़ता है, तो 'Ctrl-c'' InsertLeave 'autocmd ईवेंट दोनों के साथ-साथ किसी भी लंबित डालने मोड संक्षेप को विस्तारित करता है। इसका अर्थ यह है कि यदि आप इसे ठीक से करने के बजाय डालने मोड से बाहर निकलने के लिए 'Ctrl-c' का उपयोग करना शुरू करते हैं, तो इन फ़ंक्शंस पर निर्भर किसी भी स्क्रिप्ट को तोड़ दिया जाएगा। संक्षेप में, यह उपयोग करने के लिए एक बुरी आदत है और मैं इसके खिलाफ दृढ़ता से अनुशंसा करता हूं। –

+0

@RandyMorris क्या आपके पास तीर कुंजियों को विशेष रूप से रीमेप करने के बारे में कोई योग्यता है? – Robz

+0

@Robz बिलकुल नहीं। वे डिफ़ॉल्ट रूप से एक डुप्लिकेट मैपिंग प्रदान करते हैं, इसलिए वे कुछ और उपयोगी होने के लिए मैपिंग के लिए एक महान उम्मीदवार हैं। –

उत्तर

15

यदि आप टर्मिनल में विम का उपयोग कर रहे हैं तो आपको बिल्कुल Escape रीमेप नहीं करना चाहिए। जिस तरह से कुंजी को vim (और संभवतः टर्मिनलों में सामान्य रूप से) में नियंत्रित किया जाता है, इसे रीमेप करने से सभी प्रकार की चाबियाँ टूट जाएंगी जिन्हें आप बदलने पर नहीं चाहते थे। मेरा मतलब क्या है, देखने के लिए, निम्न कार्य करें।

  1. कोई स्टार्टअप फ़ाइलों के साथ vim खोलें: vim -u NONE --noplugin -N
  2. डालने मोड दर्ज करें।
  3. Ctrl-v दबाएं, इसके बाद <F2> जैसे फ़ंक्शन कुंजियां होंगी।

दर्ज किए गए अनुक्रम पर ध्यान दें। यह संभवतः ^[ से शुरू होता है जो एक शाब्दिक Escape है।

अब खुला कोशिश निम्नलिखित:

  1. :inoremap <esc> NO ESCAPE FOR YOU
  2. डालने मोड दर्ज करें।
  3. <F2> जैसे फ़ंक्शन कुंजियों में से कोई भी दबाएं।

पिछले अनुक्रम <F2> कुंजी दबाएँ के हिस्से के रूप भागने चरित्र से पता चला है, तो आप अब हमारे नए स्क्रीन को मुद्रित स्ट्रिंग देखेंगे। वास्तव में, अब आपके पास मैपिंग है, कर्सर कुंजी का उपयोग करके चारों ओर स्थानांतरित करने का प्रयास करें। आप शायद एक ही विचित्र व्यवहार देखेंगे।

निष्कर्ष में, भागने को पुनः प्राप्त न करें, मैं लगभग गारंटी देता हूं कि आपके पास अप्रत्याशित परिणाम होंगे।

6

यहां आप जो चाहते हैं उसे प्राप्त करने का एक गैर-geeky तरीका है: कागज के टुकड़े टुकड़े अपने अंगूठे के आकार के लिए और उन्हें चाबियाँ टेप। जिस क्षण आपकी उंगली उन तक पहुंचने की कोशिश करती है, आप इसके बजाय पेपर में टक्कर लेंगे। वे एक अच्छा अनुस्मारक बन जाएंगे। उन्हें तब तक टेप रखें जब तक कि आप उन पर बंपिंग बंद नहीं कर देते।

+2

यह मानता है कि आप केवल विम का उपयोग करते हैं, हम में से कुछ अन्य ऐप्स के बीच भी स्विच करना चाहते हैं। – ideasman42

3

क्या था करीब था:

inoremap <esc> <NOP> 
inoremap <Left> <NOP> 
inoremap <Right> <NOP> 
inoremap <Up> <NOP> 
inoremap <Down> <NOP> 
nnoremap <Left> <NOP> 
nnoremap <Right> <NOP> 
nnoremap <Up> <NOP> 
nnoremap <Down> <NOP> 

इस लाइन आप मुसीबत पैदा कर रहा था:

noremap <Esc> <NOP> 
+1

धन्यवाद! जैसा कि मैंने देखा कि यह उस चीज़ के बहुत करीब है जिसे मैं ढूंढ रहा था। तीर कुंजी काम नहीं करती है (और यह वांछित कार्रवाई है), लेकिन "Esc" कुंजी अभी भी सम्मिलित मोड से सामान्य मोड में स्विच हो जाती है। और मैं इस व्यवहार को हटाना चाहता हूं। – bessarabov