मैं वीआई में एक पूरी फ़ाइल के इंडेंटेशन को कैसे ठीक करूं?


625

विम में, सभी पंक्तियों के इंडेंटेशन को सही करने के लिए क्या कमांड है?

अक्सर मैं एक रिमोट टर्मिनल में कोड कॉपी और पेस्ट करता हूँ और पूरी चीज़ गड़बड़ हो जाती है। मैं इसे एक झपट्टा में ठीक करना चाहता हूं।


इसी तरह:
वीई

8
रोकथाम इलाज से बेहतर है। उस भावना में यह टिप्पणी आती है। रिमोट टर्मिनल से इन्सर्ट मोड और पेस्टिंग कोड डालने से पहले "सेट पेस्ट" करें।
चॉथिक प्रोजेक्ट

जवाबों:


1215

=इंडेंट कमांड मोशन ले सकती है। तो, ggफ़ाइल की शुरुआत, प्राप्त करने के लिए =मांगपत्र के लिए, Gफ़ाइल के अंत में, gg=G


39
मैं अपने अनमोल 1G को अनलिंक नहीं कर पाऊंगा =) मेरा पसंदीदा में से एक = एक ओपनिंग ब्रैकेट पर खड़ा है। यह पूरे ब्लॉक के इंडेंट को ठीक करता है।
PEZ

2
: 0 <वापसी> इतना बुरा नहीं है लेकिन जीजी अच्छा है। (हाँ, मैंने एड पहले सीखा)
एरिक ओल्सन

8
क्या मैं वर्तमान लाइन को छोड़े बिना पूरी फ़ाइल को इंडेंट कर सकता हूं?
फैबियो पेरेज़

86
@ फैबियो: ''(दो एकल उद्धरण) आपको वापस उस स्थान पर ले जाते हैं जहां आप इतने gg=G''इंडेंट थे कि फिर वापस आ जाएं।
निमो 157

@ArchimedesTrajano मैक ओएस का स्टॉक विम बहुत पुराना है, मैं होमब्रिज के संस्करण की सिफारिश करता हूं; यह बहुत नया है। मैक के विम के साथ मेरे कुछ कष्टप्रद मुद्दे थे। इसके अलावा, मैंने सुना है कि आपको बिल्ट-इन एक के साथ गड़बड़ नहीं करनी चाहिए, इसलिए जब तक आप बहुत सावधान न हों, इसे स्वयं अपडेट करने की कोशिश न करें।
एलेक्सा

126

टर्मिनल में चिपकाने से पहले, कोशिश करें :set pasteऔर उसके :set nopasteबाद आप कर रहे हैं। यह ऑटो-इंडेंट, लाइन-रैप और अन्य सुविधाओं को बंद कर देगा जो आपके पेस्ट को गड़बड़ कर रहे हैं।

संपादित करें: इसके अलावा, मुझे यह इंगित करना चाहिए कि =इंडेंटिंग की तुलना में बेहतर परिणाम आमतौर पर किसी बाहरी कार्यक्रम का उपयोग करके प्राप्त किया जा सकता है। उदाहरण के लिए, मैं :%!perltidyहर समय दौड़ता हूं । astyle, cindentआदि का भी उपयोग किया जा सकता है। और, ज़ाहिर है, आप उन लोगों को एक कुंजी स्ट्रोक पर मैप कर सकते हैं, और फ़ाइल प्रकार के आधार पर अलग-अलग लोगों को एक ही कीस्ट्रोक पर मैप कर सकते हैं।


5
आप कस्टम कीबाइंडिंग के बजाय equalprgइंडेंटिंग के लिए एक बाहरी फ़िल्टर का उपयोग करने के लिए एक ftplugin में विकल्प सेट कर सकते हैं =
जोश ली

Theres भी एक pastetoggle कीबाइंडिंग विकल्प जैसे। : मोड के बीच फ्लिप करने के लिए pt \ p सेट करें
microsoft

नोट: grml के vimconfig में पेस्टेटॉगल की कुंजी F11 में डाली गई है
थॉमस

मैं formatpgmसाफ और astyle और फिर के साथ उपयोग करें gq। यहाँ मेरे कुछ उदाहरण हैं .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xmlऔरau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
रफ़ी खाचदौरेन

बस इसे पढ़ने के बाद perltidy को डाउनलोड किया, यह डिफ़ॉल्ट विम ऑटो इंडेंट की तुलना में बहुत बेहतर है
जोय सिचेनोविक्ज़

29

यदि आप बिना किसी राग को टाइप किए हुए ब्लॉक को फिर से लिखना चाहते हैं, तो आप ऐसा कर सकते हैं:

[[=]]

1
इसे पुनर्जीवित करने के लिए क्षमा करें, लेकिन आपको chords से क्या मतलब है? Coords?
जॉन पी

7
"कॉर्ड्स" यहाँ एक को दबाते हुए जारी की गई कमांड्स को संदर्भित करता है, जबकि एक दूसरे को दबाकर, संगीतमय कॉर्ड्स के अनुरूप एक ही बार में कई नोट ध्वनि थे। तो G शिफ्ट + जी, ^] ctrl +] है, और इसी तरह। इनमें सिंगल-की बाइंडिंग की तुलना में अधिक समय लगता है।
राल्फ जाइल्स

आप उपयोग भी कर सकते हैं =aBजो कर्सर को बिल्कुल भी स्थानांतरित नहीं करेगा।
अमीन

7
नॉर्डिक कीबोर्ड पर, [[=]]
k4kuz0

29

सभी आज्ञाओं का स्वामी है

gg=G

यह पूरी फाइल को इंडेंट करता है!

और नीचे दिए गए कुछ सरल और सुरुचिपूर्ण आदेशों का उपयोग जल्दी से विम या जीवीएम में लाइनों को इंडेंट करने के लिए किया जाता है।

वर्तमान लाइन के नीचे की सभी लाइनों को इंडेंट करने के लिए

=G

वर्तमान लाइन को इंडेंट करने के लिए

==

nवर्तमान लाइन के नीचे की रेखाओं को इंडेंट करने के लिए

n==

उदाहरण के लिए, वर्तमान लाइन के नीचे 4 लाइनों को इंडेंट करने के लिए

4==

कोड के एक ब्लॉक को इंडेंट करने के लिए, ब्रेसिज़ में से एक पर जाएं और कमांड का उपयोग करें

=%

17

आप HTML और XML फ़ाइलों को इंडेंट करने के लिए सुव्यवस्थित अनुप्रयोग / उपयोगिता का उपयोग कर सकते हैं और यह उन फ़ाइलों को इंडेंट करने में बहुत अच्छा काम करता है।

एक्सएमएल फ़ाइल को प्रीटेट करें

:!tidy -mi -xml %

एक HTML फ़ाइल को प्रीटेट करें

:!tidy -mi -html %

16

प्रेस से बच और फिर नीचे दिए गए संयोजन तेजी से टाइप करें:

gg=G

28
मैंने धीरे से टाइप किया, आपको विश्वास नहीं होगा कि आगे क्या हुआ।
k0pernikus

मैंने जवाब और टिप्पणी को एक अपवित्र दिया क्योंकि वह अनमोल था! lol @ k0pernikus
चश्मा

12

1G=G। यह फ़ाइल में सभी लाइनों को इंडेंट करना चाहिए। 1Gआपको पहली पंक्ति में ले जाता है, =ऑटो-इंडेंट शुरू करेगा और अंतिम Gआपको फ़ाइल में अंतिम पंक्ति में ले जाएगा।


या यहां तक ​​कि1gg=G
Biggybi

1G = G ने इसे मेरे लिए निर्धारित किया। बहुत बढ़िया!
नेटस ड्रू

8

:set pasteक्या आपका दोस्त मैं पोटीन का उपयोग कर रहा हूं और खिड़कियों के बीच कोड की नकल कर रहा हूं। इससे पहले कि मैं :set paste(और :set nopaste) कॉपी / पेस्ट को चालू किया जाता, उसने मुझे उसी कारण फिट किया।


1
हां, मैं भी पोटीन का उपयोग कर रहा हूं। : सेट पेस्ट कमाल का है
mmcdole

7

विम में, उपयोग करें :insert। यह आपके सभी फॉर्मेटिंग को बनाए रखेगा और ऑटोइंडेंटिंग नहीं करेगा। अधिक जानकारी के लिए help :insert


7

यदि आप :set pasteमध्य-क्लिक का उपयोग नहीं करना चाहते हैं set nopaste, तो आप क्लिपबोर्ड की सामग्री को भी चिपका सकते हैं:

"*p
"+p

इस तरह आपको सामान्य मोड नहीं छोड़ना है। यदि आपको पेस्ट करना है +या इस *बात पर निर्भर करता है कि आपने पाठ का चयन कैसे किया है, तो देखें :help quoteplus


4

vim-autoformat आपकी भाषा के लिए विशिष्ट बाहरी कार्यक्रमों का उपयोग करके आपके स्रोत फ़ाइलों को प्रारूपित करता है, जैसे कि Ruby फ़ाइलों के लिए "rbeautify" मणि, जावास्क्रिप्ट के लिए "js-beautify" npm पैकेज।


3

जटिल C ++ फ़ाइलों के लिए vim को =फ़िल्टर कमांड का उपयोग करते समय हमेशा फॉर्मेटिंग सही नहीं मिलती है । तो ऐसी स्थितियों के लिए एस्ट्रल जैसे बाहरी सी ++ फॉर्मैटर का उपयोग करना बेहतर होता है (या अविश्वास ) जैसे:

:%!astyle

विम का '=' फ़ंक्शन डिफ़ॉल्ट रूप से अपने आंतरिक फ़ॉर्मेटर का उपयोग करता है (जो हमेशा चीजों को सही नहीं करता है) लेकिन कोई इसे सेट भी कर सकता है, जैसे कि यह इस सवाल पर चर्चा के रूप में इसे स्थापित करके, एस्ट्रल जैसे बाहरी फ़ॉर्मेटर का उपयोग कर सकता है ।



1

आपके लिए ऐसा करने के लिए आप मैपिंग बना सकते हैं।

यह पूरी फ़ाइल को ऑटो इंडेंट करेगा और फिर भी आपके कर्सर को उस स्थिति में रखेगा जो आप हैं:

nmap <leader>ai mzgg=G`z

0

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

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}

0

बस दृश्य मोड में जाएं, और सिर्फ प्रेस = का चयन करने के बाद ऊपर से नीचे की पंक्तियों तक का चयन करें, सभी चयनित लाइन इंडेंट हो जाएंगी।


मैं इससे बचूंगा। विजुअल मोड तब होता है जब आप अपने इरादों के बारे में अनिश्चित होते हैं, यदि आप जानते हैं कि वर्णों के एक सेट को कैसे कैप्चर करना है, तो दृश्य मोड में छोड़ने के अतिरिक्त चरण का कोई मतलब नहीं है। क्यों ggvG=जब आप कर सकते हैं gg=G। गति को दृश्य बनाने में क्या बिंदु था? यह उन सभी कार्यों के लिए जाता है जो गति लेते हैं।
अलेक्ट्स सेप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.