जब मैं संपादन मोड छोड़ता हूं, तो विम को पीछे जाने से रोकें?


9

विम में, अगर मैं कुछ भी किए बिना संपादन मोड में प्रवेश करता हूं और छोड़ता हूं, तो कैरेट एक वर्ण को बाईं ओर समाप्त करता है। और अगर मैं एपेंड मोड में प्रवेश करता हूं और छोड़ता हूं, तो कैरेट आगे बढ़ता है और फिर पीछे की ओर।

इन मामलों में अकेले कार्यवाहक छोड़ने के लिए विम को कॉन्फ़िगर करने का कोई तरीका?

आदर्श रूप से मैं सिर्फ हमेशा एपेंड मोड में प्रवेश करना चाहता हूं, लेकिन जब मैं मोड में प्रवेश करता हूं या बाहर निकलता हूं तो कैरेट को स्थानांतरित किए बिना।

(वर्तमान में मैं आमतौर पर इन्सर्ट मोड का उपयोग करता हूँ क्योंकि यह एंट्री पर मेरी कैरट पोजीशन को गड़बड़ नहीं करता है। यह तब है, जब मुझे लाइन के अंत में संलग्न होने की आवश्यकता होती है, सिवाय ऐसे मामले में जब मैं इस तरह के पुरातन शैली में व्यवहार करने की कसम खाता हूँ , Esc दबाएं और एपेंड मोड दर्ज करें।)


1
इस सवाल के जवाब अच्छे हैं। मैं केवल यह बताना चाहता हूं कि यदि वे अपनी मान्यताओं में सही हैं, जिसका उपयोग आप संपादन मोड पर जाने के लिए करते हैं, तो यही कारण है कि पीछे की ओर बढ़ रहा है। यदि आप 'ए' (ए नहीं) का उपयोग करते हैं तो यह आपकी अपेक्षा के अनुरूप काम करेगा।
जॉनी

@ जॉनी मुझे नहीं लगता कि यह होगा। मैं आमतौर पर "सामान्य" मोड में हूं, फ़ाइल और सामान के आसपास घूम रहा हूं। जब मुझे एक संपादन करने की आवश्यकता होती है, तो मैं पहले कैरेट को स्थिति देता हूं, फिर "a" दबाता हूं, और फिर पाता हूं कि मैंने इसे गलत तरीके से पोस्ट किया था, क्योंकि यह दाईं ओर चलता है। यह देखते हुए कि मैं अपने संपादन का 99% समय आधुनिक संपादकों में बिताता हूं, कोई मौका नहीं है कि मैं कभी भी "a" दबाने से पहले किसी चार को बाईं ओर रखने के लिए याद रखूंगा। यही कारण है कि मैं एक मैक्रो या कुछ के लिए उम्मीद कर रहा था।
रोमनस्ट

यह आदतों का सवाल है। यह वास्तव में कष्टप्रद है, लेकिन केवल पहले वर्ष। आप अंततः प्रेस को जानेंगे iया aइसके बारे में सोचो बिना, और यहां तक कि हो सकता है s, S, ci", आदि सीमित करने के बजाय iऔर a
ल्यूक हरमिट 16

1
मैं आपकी हताशा को समझता हूं लेकिन इसके बजाय यह सोचने की कोशिश करें कि आप क्या कर रहे हैं। अपने आप से पूछें कि क्या ऐसा करने का एक बेहतर तरीका है (विम का उपयोग एक नियमित पाठ के रूप में करने के लिए, वह है)। मैंने विम के साथ पाया हमेशा एक बेहतर तरीका है, चीजों को करने का विम तरीका। हम मदद कर सकते हैं लेकिन हमें यह जानना होगा कि समस्याओं में भागते समय आप क्या कर रहे हैं। क्या आप उदाहरण के लिए संपादन मोड में जाते हैं जब आप कुछ हटाना चाहते हैं? वर्णों को हटाने के लिए 'x' नहीं है। एक चरित्र को बदलना चाहते हैं, फिर 'आर' है। आप जो हासिल करना चाहते हैं, उसके बारे में जरा सोचें।
जॉनी

@ जॉनी मैं समझता हूं कि आप किस बारे में बात कर रहे हैं, लेकिन मेरे लिए समझ बनाने के लिए बहुत अधिक रिलेक्सेशन की आवश्यकता है। मैं अपने संपादन समय का 99% दृश्य स्टूडियो में बिताता हूं और मुझे यह पसंद है। मुझे सिर्फ इतना पता है कि मैं इस पर भरोसा नहीं करूंगा, इसलिए समय बर्बाद करने का कोई मतलब नहीं है।
रोमनस्ट

जवाबों:


9

यह प्रश्न नए vi / Vim उपयोगकर्ताओं के बीच अक्सर पूछा जाता है, और उत्तर यह है कि सामान्य मोड में, कर्सर हमेशा "एक वर्ण" पर होता है, लेकिन सम्मिलित मोड में कर्सर हमेशा "दो वर्णों" के बीच होता है (याद रखें, अंत -ऑफ़-लाइन एक चरित्र है)। आप वास्तव में इस उदाहरण को कंसोल कंसोल में भी नहीं देख सकते हैं, लेकिन GUI में आप देखेंगे कि जब आप सामान्य मोड में होते हैं, तो किसी वर्ण पर ब्लॉक के बजाय, आप दो वर्णों के बीच एक बार बन जाते हैं।

तो आप जो देख रहे हैं, वह जरूरी नहीं है कि जब आप इंसर्ट मोड छोड़ते हैं, तो कर्सर एक कैरेक्टर को आगे बढ़ाता है, बल्कि एक कैरेक्टर पर चलता रहता है। आंदोलन की एकमात्र सुरक्षित दिशा बाईं (या पीछे) है। इस प्रकार, आपके पास इन्सर्ट मोड डालने का एक से अधिक तरीका है:

  • "a" कर्सर के साथ इंसर्ट मोड में प्रवेश करता है "कर्सर" उस चरित्र के बीच होता है और दाईं ओर अगला वर्ण होता है।
  • "I" कर्सर के साथ इन्सर्ट मोड में प्रवेश करता है "चरित्र के बीच" कर्सर चालू था और पिछले वर्ण बाईं ओर।

कुछ लोगों ने इस "आंदोलन" को दबाने का प्रयास किया है जो उन्हें पसंद नहीं है, लेकिन यह अनिवार्य रूप से प्लगइन्स और अन्य विम स्क्रिप्ट के साथ हस्तक्षेप करता है जिसे वे भविष्य में चलाना चाहते हैं।

मेरा सुझाव उचित परिस्थितियों में "ए" और "आई" (और "ए" और "आई") कमांड का उपयोग करने की आदत डालना है।

"ओ" और "ओ" कमांड भी सीखने के लिए उपयोगी हैं। देख:

:help a
:help i
:help A
:help I
:help o
:help O

संपादित करें: यदि आप अभी भी इस व्यवहार को बदलने के लिए दृढ़ हैं, तो इस टिप को आज़माएं: कर्सर को एक वर्ण को बाईं ओर ले जाने से बचें


1
मैं समझता हूं कि आप क्या कह रहे हैं, लेकिन "i" / "Esc" / "i" / "Esc" कैरेट के वास्तविक समग्र शुद्ध आंदोलन का कारण बनता है। मुझे वास्तव में लगता है कि वीआईएम मेरे लिए नहीं है।
रोमनस्ट

2
@romkyns: मुझे लगता है कि आपको aइसके बजाय क्या करना चाहिए i
अगली सूचना तक रोक दिया गया।

1
@ डेनिस ने सहमति व्यक्त की, "ए" थोड़ा बेहतर है क्योंकि यह कैरेट को पहले चार से पहले और एक पंक्ति में अंतिम चार के बाद होने की अनुमति देता है - जो कि "मैं" मनमाने ढंग से अस्वीकार करता है। लेकिन मैंने कोशिश की कि; क्या होता है कि मैं हमेशा "a" दबाने से पहले कैरेट का गलत इस्तेमाल करता हूं - इसलिए मुझे तुरंत कैरेट को बाईं ओर ले जाना होगा। हर बार। यह थक गया तो मैंने "i" पर स्विच किया।
रोमनस्ट

@ हो सकता है कि आप मुझे किसी ऐसी चीज के क्रियान्वयन के बारे में बताएं जो आंदोलन को दबाती हो? मेरे लिए भविष्य में प्लगइन्स या अन्य स्क्रिप्ट का उपयोग करने की संभावना अनिवार्य रूप से शून्य है।
रोमनस्टॅन

1
@romkyns, यह (दोनों) तरीके से काम नहीं करता है। रीमैपिंग <esc>वास्तव में <esc>सही तरीके से काम करने के लिए अधिकांश प्लगइन को रोक देगा , लेकिन साथ ही, यह आपको परेशान करना जारी रखेगा जब आप अन्य मानक सुविधाओं का उपयोग कर रहे होंगे जो उसी तरह से सामान्य मोड में लौटते हैं <esc>। मक्खी पर सही कुंजी का उपयोग करना सीखना वह उपाय है जो लंबे समय में काम करता है।
ल्यूक हरमिट 16

1

मुझे लगता है कि कैरेट से आपका मतलब है कि आपका कर्सर और यदि आप "i" का उपयोग कर रहे हैं, तो यह सीधे उस जगह को सम्मिलित करेगा जहां आपका कर्सर है, "a" (जो मुझे लगता है कि आप ढूंढ रहे हैं) कर्सर को एक वर्ण को दाईं ओर ले जाता है। इसके अलावा, शिफ्ट- i (I) लाइन के भीख मांगने के लिए जाएगा और शिफ्ट-ए (ए) लाइन के अंत तक सभी तरह से जाएगा।

अगर मैंने आपके प्रश्न को गलत समझा है तो मैं माफी माँगता हूँ।


1

चूँकि रीमैपिंग <ESC>को 'जोखिम भरा' माना जाता है, मैं सिर्फ एक बची हुई कुंजी दृष्टिकोण से बचता हूँ और मेरे निम्नलिखित में से एक है .vimrc:

 inoremap ii <ESC>l

नोट: सुनिश्चित करें कि पंक्ति के अंत में कोई स्थान वर्ण नहीं हैं।

सरल, लेकिन पूरी तरह से "मेरे लिए ठीक काम करता है" के रूप में प्रमाणित किया गया है, जैसा कि मैंने अन्यथा हाथ से टाइप किया है।

क्या मैं उपयोग करता हूं aया iमुझे अभी भी कैरट मूविंग बैक बिहेवियर मिलता है और यह मेरे से अधिक बार नर्क को खत्म कर देता है, फिर अगली चीज जो मैं टाइप करना चाहता हूं d$वह है एक लाइन के अंत तक डिलीट करना, आदि।


आश्चर्यजनक सरल उपाय। सर्वश्रेष्ठ मैं भर आया हूँ।
टायलर कोलियर

1

यहाँ मेरा समाधान है:

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])

ये मजाकिया है। यह तीनों साइटों: SO, SU, Unix + Linux पर एक ही प्रश्न मौजूद है।


मुझे यह हास्यास्पद नहीं लगता है :) सौभाग्य से मुझे एक संपादक मिला है जो मुझे पागल (डायकोनोस) ड्राइव नहीं करता है, इसलिए यह अब एक मुद्दा नहीं है। फिर भी, जो लोग पसंद करते हैं, उनके लिए उत्थान किया जाता है।
रोमनस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.