मैं vim में autoformat / indent C कोड कैसे ले सकता हूं?


250

जब मैं किसी अन्य फ़ाइल से कोड कॉपी करता हूं, तो फॉर्मेटिंग गड़बड़ हो जाती है, जैसे:

fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}

मैं इस कोड को vim में कैसे कर सकता हूं?


3
प्रारूप की तलाश करने वाले और न केवल कोड को इंडेंट करने के लिए, दूसरा उत्तर (मेरा) पता करता है। यदि आप केवल इंडेंटिंग को ठीक करना चाहते हैं, तो स्वीकृत उत्तर सबसे आसान तरीका है।
डेरेक

जवाबों:


566

निम्नलिखित कीस्ट्रोक की कोशिश करें:

gg=G

स्पष्टीकरण: ggफ़ाइल के शीर्ष पर जाता है, =इंडेंटेशन को ठीक करने के लिए एक कमांड है और Gइसे फ़ाइल के अंत में ऑपरेशन करने के लिए कहता है।


28
यह केवल कोड को इंडेंट करता है। क्या पूरी चीज़ को स्वचालित करने के लिए कुछ नहीं किया जा सकता है?
N 1.1

7
अंतर क्या है?
टन वैन डेन हेउवेल

3
@ वैन: अंतर के लिए मेरा जवाब देखें (टिप्पणियों में यहाँ नहीं समझाया जा सकता है)।
लेज़र

2
-1 यह केवल इंडेंटेशन को ठीक करता है, फॉर्मेटिंग को नहीं (जो पूछा जा रहा था)।
ओलिगोफ़्रेन

3
@oligofren ओपी के उदाहरण में केवल इंडेंटेशन त्रुटियां शामिल थीं और वह जवाब स्वीकार करता है, इसलिए मुझे लगता है कि उसका मतलब क्या है।
अमीर रचूम

78

मुझे कार्यक्रम कलात्मक शैली का उपयोग करना पसंद है। उनकी वेबसाइट के अनुसार :

कलात्मक शैली सी, सी ++, सी # और जावा प्रोग्रामिंग भाषाओं के लिए एक स्रोत कोड इंडेंटर, फॉर्मेटर और ब्यूटिफायर है।

यह विंडो, लिनक्स और मैक में चलता है। यह इंडेंट जैसे कार्य करने के रिक्त स्थान या इसके विपरीत के साथ टैब की जगह होगा, संचालन के साथ स्पेस डाल लेकिन आप की तरह (परिवर्तित if(x<2)करता है, तो करने के लिए ( x<2 )करता है, तो है कि कैसे आप इसे की तरह), समारोह निर्धारण के रूप में एक ही लाइन पर ब्रेसिज़ डाल, या उन्हें में जाने नीचे पंक्ति, आदि सभी विकल्प कमांड लाइन मापदंडों द्वारा नियंत्रित होते हैं।

इसे vim में उपयोग करने के लिए, बस इसके लिए formatprg विकल्प सेट करें, और उसके बाद gq कमांड का उपयोग करें। इसलिए, उदाहरण के लिए, मैं अपने .vimrc में है:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb

ताकि जब भी मैं एक .cpp फ़ाइल खोलूं, तो मुझे पसंद किए जाने वाले विकल्पों के साथ स्वरूपण सेट हो जाए। फिर, मैं फ़ाइल के शीर्ष पर जाने के लिए gg टाइप कर सकता हूं, और gqGअपने मानकों के अनुसार पूरी फ़ाइल को प्रारूपित कर सकता हूं। अगर मुझे केवल एक फ़ंक्शन को पुन: स्वरूपित करने की आवश्यकता है, तो मैं फ़ंक्शन के शीर्ष पर जा सकता हूं, फिर टाइप करें gq][और यह केवल उस फ़ंक्शन को पुन: स्वरूपित करेगा।

मेरे पास एस्टल के लिए जो विकल्प -T4pbहैं, वे सिर्फ मेरी प्राथमिकताएं हैं। आप उनके डॉक्स के माध्यम से देख सकते हैं , और उन विकल्पों को बदल सकते हैं जिनके पास आपको कोड पसंद है।

यहाँ एक डेमो है। अस्टाइल से पहले:

int main(){if(x<2){x=3;}}

float test()
{
if(x<2)
x=3;
}

अस्टाइल के बाद (gggqG):

int main()
{
    if (x < 2)
    {
        x = 3;
    }
}

float test()
{
    if (x < 2)
        x = 3;
}

उम्मीद है की वो मदद करदे।


3
क्या अन्य प्रारूपों के लिए ऐसा कुछ है; माणिक, xml, json, आदि?
व्युत्पन्न

1
@ रियान जाँच विम-ऑटोफार्माट, नीचे उत्तर देखें। BTW विम-ऑटोफॉर्माट अन्य लोगों के बीच भी एस्टाइल का उपयोग करता है।
चायल दस ब्रिंक

1
धन्यवाद! मुझे लगता है कि मैं शब्द का एकमात्र व्यक्ति था जो फ़ंक्शन घोषणा के रूप में एक ही लाइन पर अपने शुरुआती कोष्ठक नहीं चाहता था!
user3640967

27

कोड को ठीक से इंडेंट करने के लिए अंतर्निहित कमांड पहले ही उल्लेख किया गया है ( gg=G)। यदि आप कोड को सुशोभित करना चाहते हैं , तो आपको इंडेंट जैसे बाहरी एप्लिकेशन का उपयोग करना होगा । चूंकि %वर्तमान फ़ाइल को पूर्व मोड में दर्शाया गया है, आप इसे इस तरह उपयोग कर सकते हैं:

:!indent %

13

प्लगइन vim-autoformat आपको एक कमांड के साथ अपने बफर (या बफर चयन) को प्रारूपित करने देता है: https://github.com/Chiel92/vim-autoformat । यह उस के लिए बाहरी प्रारूप कार्यक्रमों का उपयोग करता है, जो विम की इंडेंटेशन कार्यक्षमता में गिरावट के साथ होता है।


11

मुझे लगता है कि clang-formatअच्छी तरह से काम करता है।

क्लैंग डॉक्यूमेंटेशन में कुछ उदाहरण कीबाइंडिंग हैं

मैं equalprgबाध्यकारी का उपयोग करना पसंद करता हूं । यह आपको या अन्य इंडेंट विकल्पों के clang-formatसाथ आह्वान करने की अनुमति देता है ।G=gg=

बस अपने .vimrc फ़ाइल में निम्नलिखित डालें:

autocmd FileType c,cpp setlocal equalprg=clang-format

3
इसे पहले स्थापित करने की आवश्यकता है, उदाहरण के लिए ubuntu 16.04+:sudo apt install clang-format
एरिक वांग

3

हो सकता है आप $ इंडेंट -kr -i8 * .c का अनुसरण करने की कोशिश कर सकते हैं

आशा है कि यह आपके लिए उपयोगी है!


3

जैसा indentकि मैंने ऊपर उल्लेख किया है, लेकिन सबसे अधिक बार मैं केवल उस फ़ाइल के एक छोटे से भाग को प्रारूपित करना चाहता हूं जो मैं काम कर रहा हूं। चूंकि indentस्टड से कोड लिया जा सकता है, यह वास्तव में सरल है:

  1. उस कोड के ब्लॉक का चयन करें जिसे आप प्रारूपित करना चाहते Vहैं।
  2. टाइप करके फॉर्मेट करें :!indent

astyle स्टड भी लेता है, इसलिए आप उसी चाल का उपयोग कर सकते हैं।


3

मैं जोड़ना चाहता था, ताकि इसे :set pasteचिपकाने से पहले आप पहले टाइप कर सकें । चिपकाने के बाद, आप :set nopasteफिर से काम करने के लिए js-beautify और indenting जैसी चीजों के लिए टाइप कर सकते हैं ।


1
मैं इसके लिए उपयोग करता हूं :set paste!, जो इसे सेट करने के बजाय पेस्ट मूल्य को टॉगल करता है। यह बंद करने के लिए आसान बनाता है क्योंकि आप बस कुछ आदेशों को वापस स्क्रॉल कर सकते हैं और एंटर दबा सकते हैं।
a'r

0

उनका एक उपकरण कहा जाता है indent। आप इसे डाउनलोड कर सकते हैं apt-get install indent, फिर चला सकते हैं indent my_program.c

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