सी में विम के साथ ऑटो-इंडेंट स्पेस?


85

मुझे ग्रहण और जावा का उपयोग करके कुछ खराब कर दिया गया है। मैं एक लिनक्स वातावरण में सी कोडिंग करने के लिए विम का उपयोग करना शुरू कर दिया है, क्या कोई तरीका है जो स्वचालित रूप से ब्लॉकों के लिए उचित रिक्ति करना है?

तो {{अगली पंक्ति टाइप करने के बाद 2 रिक्त स्थान इंडेंट हो जाएंगे और उस लाइन पर एक रिटर्न उसी इंडेंटेशन में रहेगा, और एक} वापस 2 स्पेस को शिफ्ट कर देगा?

जवाबों:


134

इन दो आदेशों को करना चाहिए:

:set autoindent
:set cindent

बोनस पॉइंट्स के लिए उन्हें .vimrc नाम की एक फाइल में रखें, जो आपके होम डायरेक्टरी में linux पर स्थित है


12
मैं उन ~ ~ .vim / ftplugin / c.vim में डालने की भी सिफारिश करूँगा ताकि आप हर समय cindent का उपयोग न कर रहे हों, लेकिन केवल C / C ++ फ़ाइलों के लिए।
ग्रेव

@graywh: pl, php, cpp, as, java, और अन्य सभी फाइलों के बारे में जो मैं समान इंडेंट करना चाहता हूं? क्या मुझे प्रत्येक के लिए एक अलग सेटिंग फ़ाइल बनाने की आवश्यकता है?
18

17
(: पर filetype मांगपत्र) जो है मैं विम के बंडल मांगपत्र लिपियों भरोसा ज्यादा सिर्फ 'cindent' का उपयोग हमेशा की तुलना में बेहतर।
ग्रेव

3
: क्यों filetype खरोज cindent का उपयोग करने से बेहतर है अच्छी तरह से यहाँ समझाया vim.wikia.com/wiki/...
जायें

1
Autoindent के लिए, आप आशुलिपि का उपयोग करना चाहें: सेट एअर इंडिया
Iam Zesh

56

मैंने सभी टैब के बारे में लिखा है , जो कुछ दिलचस्प चीजें देता है जिनके बारे में आपने नहीं पूछा। स्वतः ब्रेसिज़ को इंडेंट करने के लिए, उपयोग करें:

:set cindent

दो स्थानों को इंडेंट करने के लिए (आठ स्थानों के एक टैब के बजाय, डिफ़ॉल्ट डिफ़ॉल्ट):

:set shiftwidth=2

आठ स्थानों को टैब में बदलने से विम रखने के लिए:

:set expandtab

यदि आप कभी भी पाठ के ब्लॉक के इंडेंटेशन को बदलना चाहते हैं, तो <और> का उपयोग करें। मैं आमतौर पर ब्लॉक-सलेक्ट मोड (v, टेक्स्ट का एक ब्लॉक, <या> का चयन करता हूं) के साथ इसका उपयोग करता हूं।

(मैं आपसे दो-स्थान के इंडेंटेशन का उपयोग करने के बारे में बात करना चाहूंगा, क्योंकि मैं (और अधिकांश अन्य लोग) इसे पढ़ना मुश्किल है, लेकिन यह एक और चर्चा है।)


बहुत अच्छा ब्लॉग। मैं अभी भी काफी नया हूँ, यह जानकर अच्छा लगा कि वहाँ अच्छे संसाधन हैं, हालाँकि।
22

3
आप बदलाव के अलावा सॉफ्टटैबस्टॉप को बदलने से भी चूक गए।
ग्रेव

8

डिफ़ॉल्ट रूप से बहुत सारी विशेषताओं (जैसे autoindentऔर cindent) को बंद कर दिया गया है। वास्तव में यह देखने के लिए कि विम आपके लिए क्या कर सकता है, आपको एक सभ्य की आवश्यकता है ~/.vimrc

एक अच्छा स्टार्टर एक में है $VIMRUNTIME/vimrc_example.vim। यदि आप इसे आज़माना चाहते हैं, तो उपयोग करें

:source $VIMRUNTIME/vimrc_example.vim

जब में

मैं वास्तव में सुझाव दूंगा कि आप सामग्री को कॉपी कर रहे हैं ~/.vimrcक्योंकि यह अच्छी तरह से टिप्पणी की गई है, और एक अच्छी जगह है कि कैसे विम का उपयोग करना सीखना शुरू करें। आप इससे कर सकते हैं

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

यह आपके वर्तमान को अधिलेखित कर देगा ~/.vimrc, लेकिन अगर आपके पास वहां मौजूद सभी इंडेंट सेटिंग्स हैं, तो डावर ने सुझाव दिया है, मुझे यह पसीना नहीं आएगा, क्योंकि उदाहरण vimrc आपके लिए भी इसका ख्याल रखेगा। उदाहरण के पूर्ण पूर्वाभ्यास के लिए, और यह आपके लिए क्या करता है, देखें :help vimrc-intro


6

बस चलाते हैं:

user@host:~ $ echo set autoindent >> .vimrc

1
मैं वह नहीं था, जिसने नीचे मतदान किया था, लेकिन यह शायद इसलिए था क्योंकि "सेट ऑटिंडेंट" "{" और "}" टाइप करने पर अपने ऑटो-इंडेंट पर नहीं होता है, और न ही यह स्वचालित रूप से 2 रिक्त स्थान को सेट करता है। यही उन्होंने मांगा।
विक्टर ज़ामेनियन

3

मुझे लगता है कि सबसे अच्छा जवाब वास्तव में विम विकिया पर समझाया गया है:

http://vim.wikia.com/wiki/Indenting_source_code

ध्यान दें कि यह "सेट ऑटिंडेंट" का उपयोग करने के खिलाफ सलाह देता है। इस स्पष्टीकरण में मुझे जो सबसे अच्छी सुविधा मिल रही है, वह प्रति-फ़ाइल सेटिंग्स को सेट करने में सक्षम हो रही है, जो विशेष रूप से उपयोगी है यदि आप अजगर और C ++ में प्रोग्राम करते हैं, उदाहरण के लिए, जैसा कि आप पूर्व में टैब के लिए 4 रिक्त स्थान चाहते हैं और 2 के लिए उत्तरार्द्ध में रिक्त स्थान।


0

और हमेशा स्पेस + टैब्स के इस आदरणीय विवरण को याद रखें:

http://www.jwz.org/doc/tabs-vs-spaces.html


2
उस आदमी के तर्क के साथ क्या है? मैं इस बात का पालन नहीं करता हूं कि कैसे TAB चरित्र का उपयोग नहीं किया जाता है, और इसके बजाय हार्ड-कोडित रिक्त स्थान के साथ भरना, सभी की समस्याओं को हल करता है। उदाहरण के लिए, किसी फ़ाइल को खोलना और अपने इंडेंट की चौड़ाई को अपनी प्राथमिकताओं के अनुसार दिखाना असंभव हो सकता है।
थोमसट्रेटर

1
इस आदमी का समाधान बहुत बेहतर है :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter

-1

प्रयत्न:

सेट sw = 2

सेट ts = 2

स्मार्ट सेट करें


सहायता के अनुसार, cindent स्मार्टइंडेंट से बेहतर है, लेकिन केवल C- जैसे कोड के लिए काम करता है।
थोमसट्रेटर

स्मार्टइंडेंट पदावनत है (केवल सी-जैसे कोड के लिए था, भी)। Filetype इंडेंट स्क्रिप्ट बहुत बेहतर हैं।
ग्रेव सिप

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