2008-12-09 8 views
46

जब मैं पाइथन फ़ाइलों को संपादित करते समय विम में खाली रेखा पर सम्मिलित मोड में # जोड़ता हूं, तो vim लाइन की शुरुआत में # को स्थानांतरित करता है, लेकिन मैं चाहता हूं कि # टैब टैब पर डाला जाए जहां मैंने इसे दर्ज किया था।पाइथन फ़ाइलों को संपादित करते समय लाइनों की शुरुआत में टिप्पणी न करने के लिए vim को कॉन्फ़िगर कैसे करें

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

for i in range(10): 
    # 

# वहाँ रहना नहीं है जहां मैं इसे में प्रवेश में इस लेखन।

यह विम द्वारा ऐसा किया गया है।

for i in range(10): 
# 

क्या किसी को भी कॉन्फ़िगरेशन आइटम के बारे में पता है जो इसे बदल देगा?

यदि यह मदद करता है, तो मैं उबंटू 8.10 का उपयोग कर रहा हूं।

+0

यह भी देखें: http://stackoverflow.com/questions/191201/indenting-comments-to-match-code-in-vim – Dan

उत्तर

31

मैं एक जवाब यहाँ http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

ऐसा लगता है कि vim smartindent विकल्प समस्या का कारण है पाया। उपर्युक्त संदर्भित पृष्ठ कार्य-ए-राउंड का वर्णन करता है लेकिन विवेक में स्मार्टइंडेंट में सहायता पढ़ने के बाद (स्मार्टफेंट की मदद करें), मैंने स्मार्टइंडेंट की बजाय सिंडेंट का प्रयास करने का निर्णय लिया।

मैं अपने .vimrc फ़ाइल

और अब तक यह पूरी तरह काम कर रहा है में

set smartindent 

प्रतिस्थापित

set cindent 

साथ।

इसने बदलकर '< <' और '>>' के व्यवहार को हल करने के लिए पाइथन टिप्पणियों को शामिल करने वाले दृश्य ब्लॉक को इंडेंट करने के लिए भी तय किया।

स्मार्टइंडेंट और सिंडेंट के लिए विम सहायता में इंडेंटेशन के बारे में अधिक कॉन्फ़िगरेशन विकल्प और जानकारी (स्मार्टइंडेंट और सहायता सिंडेंट की सहायता करें) हैं।

+2

आह, मेरे पास मेरे .vimrc में "फ़ाइल टाइप प्लगइन इंडेंट" है, शायद यह मेरे लिए सही तरीके से काम करने के लिए ज़िम्मेदार है। http://vimdoc.sourceforge.net/htmldoc/filetype.html – m0j0

+0

मेरा दिन बचाया। +1! :) –

+0

क्या 'सिंडेंट' के लिए कोई अनुशंसित/सामान्य कॉन्फ़िगरेशन सेटिंग्स है? –

1

मेरा विम कॉन्फ़िगरेशन ऐसा नहीं करता है। आप इस लिंक से python.vim स्क्रिप्ट उपलब्ध कोशिश कर सकते हैं: http://www.vim.org/scripts/script.php?script_id=790

+0

दुर्भाग्य से, यह मेरे मामले में काम नहीं करता है, समस्या का उपयोग करते समय समस्या बनी रहती है। मैंने संस्करण 2.6.3 का उपयोग किया क्योंकि मैंने अभी तक पायथन 3.0 में अपग्रेड नहीं किया है। शायद समस्या उबंटू विम-रनटाइम पैकेज से /usr/share/vim/vim71/indent/python.vim फ़ाइल में स्थापित है? –

2

यह 'smartindent' सुविधा के कारण होता है। यदि आपके पास :set smartindent आपके .vimrc में है तो आपको इसे हटाने की आवश्यकता है।

9

मैं अपने .vimrc में निम्नलिखित लाइनों है, मेरे Ubuntu 8,10

set smartindent 
inoremap # X^H# 
set autoindent 

साथ डिफ़ॉल्ट रूप से स्थापित किया जा रहा है और मैं समस्या का पालन नहीं करते। शायद आप इसे आजमा सकते हैं। (ध्यान दें कि^एच को Ctrl-V Ctrl-H द्वारा दर्ज किया जाना चाहिए)

19

@PolyTinker हालांकि मुझे यह प्रश्न बहुत अधिक प्रतिक्रिया दिखाई देता है, मेरी राय में यह एक अच्छा समाधान नहीं है। संपादक अभी भी सोचता है कि इसे छोड़ने के लिए सभी तरह से इंडेंट किया जाना चाहिए - एक हैश से शुरू होने वाली लाइन पर == दबाकर इसे दबाएं, या धक्का दे रहा है = जबकि इसमें टिप्पणियों वाले कोड के ब्लॉक को पुन: प्रस्तुत करने के लिए हाइलाइट किया गया है।

मैं दृढ़ता से filetype indent on की सलाह देते हैं, और अपने vimrc से set smartindent और set autoindent (या set cindent) लाइनों को दूर करेंगे। कोई और (स्पष्ट रूप से डेविड बस्टोस) हमारे लिए एक पूर्ण इंडेंटेशन पार्सर लिखने के लिए बहुत दयालु था; यह $ VIMDIRECTORY/इंडेंट/python.vim पर स्थित है।

(पॉल cindent समाधान शायद अजगर के लिए काम करता है, लेकिन filetype indent on और अधिक आम तौर पर उपयोगी है।)

+0

धन्यवाद - इससे मुझे मदद मिली। मेरे पास एक झटका था, और मैं जीवीआईएम (मैकवीम) के भीतर "फाइल टाइप इंडेंट" की कोशिश कर रहा था और इसमें कोई व्यवहार नहीं आया। एक बार मैंने इसे .vimrc में जोड़कर परीक्षण करना शुरू कर दिया, फिर पुनरारंभ किया, मैंने व्यवहार में बदलाव देखा। – finity

+0

वही समस्या, स्वीकार्य समाधान (और क्रमपरिवर्तन) का प्रयास किया, .vimrc के अंत में 'filetye indent on' रखा, और अब # टिप्पणी 'पायथन डी/आउटडेंट नहीं है। लेकिन अब मेरे लिए चीजें ऑटोइंडेंट्स। आह। – ChuckCottrill

+0

स्मार्टइंडेंट बंद करें मेरे लिए काम नहीं करता है (दोनों उबंटू विम और ओएसएक्स मैक-विम पर)। मेरे $ HOME/.vimrc पर "फ़ाइल टाइप इंडेंट" जोड़ना और पुन: प्रारंभ करना [g] vim मेरी समस्या को हल करें (दोनों पायथन और बैश स्क्रिप्ट संपादन पर)। –

4

# की unindenting मेरे समाधान:

आप cindent उपयोग करते हैं, समझते हैं कि यह सी के लिए डिज़ाइन किया गया है और सी ++ कोडिंग। यहां, एक # का मतलब है कि आप #DEFINE या #MACRO() बना रहे हैं, इसलिए व्यवहार सही है। लेकिन अन्य भाषाओं के लिए जहां # एक टिप्पणी है, यह परेशान है।

निम्नलिखित मेरे लिए काम किया:

" cindent  enable specific indenting for C code 
" set cin  nocin 
set cin 

" cinkeys  The default cinkeys causes leading # to unindent to column 0. 
"    To prevent this, remove the 0# from the definition. 
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default 
set cinkeys=0{,0},0),:,!^F,o,O,e 
0

मैं ~/.vimrc से set smartindent हटा दिया लेकिन यह अभी भी smartindent को निष्क्रिय नहीं किया था। जब मैंने एक .py फ़ाइल खोली और :set smartindent? चलाया तो यह smartindent प्रदर्शित हुआ।

बाहर कर देता है कि आगे ~/.vimrc में नीचे इस लाइन था:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class 
         ^^^^^^^^^^^ 

एक बार मैं उस लाइन से हटा दिया "smartindent", तो smartindent अंत में विकलांग हो गया था और मेरी टिप्पणी ठीक से फिर से दांतेदार थे।

2

कुछ अन्य उत्तर उपयोगी थे, लेकिन कोई भी '#' पहला चरित्र होने पर विम को एक पंक्ति को फिर से शुरू करने से रोकने के लिए पर्याप्त नहीं था। पॉली टिंकर का जवाब मेरे लिए काम नहीं करता था, लेकिन इसने एक सुराग दिया कि '#' को एक अक्षर डालने के लिए रीमेप किया जा सकता है, फिर #, फिर अतिरिक्त वर्ण हटाएं और कर्सर को कहां रखना चाहिए "।

inoremap # X#<left><backspace><right> 

यह इसलिए आवश्यक है क्योंकि vim के वाक्य रचना संकुल, विशेष वर्ण के रूप में '#' के इलाज के लिए कोई फर्क नहीं पड़ता कि कैसे विकल्प सेट हैं लगते हैं: यह मानचित्रण करता है कि है। मैं चाहता हूं कि '#' के साथ एक लाइन शुरू हो, जो किसी अन्य चरित्र के साथ शुरू होने वाली रेखा के समान हो। सबसे विश्वसनीय समाधान जो मैंने पाया है वह उपरोक्त मानचित्रण है, जो वास्तव में रेखा के पहले चरित्र को बदलता है।

नोट: मैंने पाया है कि यह मैपिंग I#<esc> चलाने के बाद समस्याओं का कारण बनती है, फिर "।" पिछले सम्मिलन को फिर से करने के लिए। मुझे अभी तक कोई समाधान नहीं मिला है।

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

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