2010-06-09 11 views
33

जब मैं एक नई लाइन खोलता हूं ('ओ' के माध्यम से) मेरा कर्सर अगली पंक्ति पर सही ढंग से इंडेंट की स्थिति में कूदता है। दूसरी तरफ, मेरे कर्सर रिक्त रेखा पर होने पर सम्मिलित मोड दर्ज करना मेरे कर्सर को सही ढंग से इंडेंट किए गए स्थान पर नहीं ले जाता है।विम: रिक्त रेखा पर सम्मिलित मोड दर्ज करते समय स्मार्ट इंडेंट?

रिक्त रेखा पर डालने मोड (i के माध्यम से) दर्ज करते समय मैं अपने कर्सर को सही तरीके से इंडेंट कैसे कर सकता हूं?

उत्तर

64

cc वर्तमान पंक्ति की सामग्री को बदलने और सही खरोज पर डालने मोड में प्रवेश करेंगे सुनिश्चित करती है - तो एक रिक्त पंक्ति क्या करेंगे पर वास्तव में क्या आप के बाद कर रहे हैं।

मुझे विश्वास है कि i के व्यवहार आपके द्वारा बताई गई सही है क्योंकि वहाँ कई उपयोग के मामलों जहां बल्कि जहाँ भी vim पर कूद से, एक रिक्त पंक्ति पर है कि विशिष्ट स्थान पर डालने के लिएचाहते हैं अनुमान है कि आप सम्मिलित करना चाहते हैं।

+1

वैसे मेरा समाधान 'मैं' उस तरीके से व्यवहार करेगा जब रेखा खाली हो जाएगी - तो केवल एक ही उपयोग केस। 'मैं' अन्य सभी परिस्थितियों में सामान्य रूप से व्यवहार करूंगा। कहा जा रहा है, सीसी बनाया गया है और अधिक उपयुक्त आईएमओ। –

+0

स्वीकार करना मुझे वीम के बारे में क्या पसंद है इससे कोई फर्क नहीं पड़ता कि आप इसका कितना समय उपयोग करते हैं, फिर भी आप हर दिन नई चीजें सीख सकते हैं। मैं डीडी, वाई और सी का उपयोग अन्य संशोधकों के साथ बड़े पैमाने पर करता हूं दिन, सीसी की कोशिश करने के लिए कभी मेरे पास नहीं आया। +1 –

+0

मेरे लिए, यह काम नहीं करता है * यदि पिछले लिन के बीच एक खाली रेखा * है ई और वह लाइन जिसे आप इंडेंट करना चाहते हैं। (यानी आपने दो बार 'ओ' मारा है, क्योंकि आप पिछली पंक्ति और कोड के अगले भाग के बीच अंतर चाहते हैं।) मुझे अभी भी * इंडेंटेशन स्तर पर, सम्मिलित मोड में कूदने का एक त्वरित तरीका देखना अच्छा लगेगा * वास्तविक कोड की पिछली पंक्ति *। – ELLIOTTCABLE

13

वैसे यह वास्तव में बुरा नहीं था जैसा मैंने सोचा था कि यह होगा। इस सक्षम करने के लिए एक तरह से करने के लिए निम्न जोड़ना है आपके ~/.vimrc

"smart indent when entering insert mode with i on empty lines 
function! IndentWithI() 
    if len(getline('.')) == 0 
     return "\"_ccO" 
    else 
     return "i" 
    endif 
endfunction 
nnoremap <expr> i IndentWithI() 

यह बस एक खाली पंक्ति के लिए जाँच करता है जब आप हिट 'i' डालने मोड से। यदि आप वास्तव में एक खाली रेखा पर हैं तो यह इसे हटा देगा और एक नया खोल देगा, जो कामकाजी 'ओपन लाइन' व्यवहार को प्रभावी रूप से लेवरेज करेगा।

नोट

: "_ से पहले सीसी कि अपने रजिस्टर मिटा दिया है नहीं मिल

+0

अच्छा। वह हमेशा मुझे खराब कर दिया। – michaelmichael

+1

वर्तमान कोड में एक बग है। 'वापसी' \ "_ सीसीओ" में, 'ओ' को हटाने की जरूरत है, अन्यथा यह डालने मोड में एक शाब्दिक 'ओ' लिख देगा। (मैंने इसे संपादित किया है, लेकिन समीक्षकों के रिटार्ड्स ने इसे खारिज कर दिया। मूल रूप से कोड 'डीडीओ ', लेकिन बाद में किसी ने' डीडी 'को' सीसी' द्वारा प्रतिस्थापित करने के लिए पोस्ट संपादित किया लेकिन 'ओ' को हटाने के लिए भूल गया।) – pcworld

+0

मैंने पाया कि' सीसीओ 'या तो काम नहीं करता है, लेकिन' ddko' किया गया था वर्तमान लाइन, पिछली लाइन पर जाएं, नई लाइन जोड़ें) –

7

रिक्त रेखा पर, डालने मोड को सही ढंग से इंडेंट करने के लिए, आप बस s का उपयोग कर सकते हैं।

ध्यान दें कि scl के लिए एक पर्याय है, इसलिए यदि आप एक खाली लाइन पर नहीं वास्तव में कर रहे हैं, यह एक एकल चरित्र को हटाने और इंडेंट नहीं पहुंच जाएंगे। उस स्थिति में, आप cc का उपयोग बंद कर रहे हैं, क्योंकि कुछ 18 महीने पहले एसएमएल ने सुझाव दिया था। लेकिन मैंने इस शॉर्टकट का उपयोग करके विमगोल्फ में अक्सर अपना स्कोर सुधार लिया है, इसलिए सोचा कि मैं इसका उल्लेख करूंगा। ;)

+2

टिप के लिए धन्यवाद! मैं अभी भी हर रोज vim के बारे में चीजें सीख रहा हूँ। –

+0

@ डेनओ'कोनर हम सभी हैं! :) – Enrico

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