विम में, सभी पंक्तियों के इंडेंटेशन को सही करने के लिए क्या कमांड है?
अक्सर मैं एक रिमोट टर्मिनल में कोड कॉपी और पेस्ट करता हूँ और पूरी चीज़ गड़बड़ हो जाती है। मैं इसे एक झपट्टा में ठीक करना चाहता हूं।
विम में, सभी पंक्तियों के इंडेंटेशन को सही करने के लिए क्या कमांड है?
अक्सर मैं एक रिमोट टर्मिनल में कोड कॉपी और पेस्ट करता हूँ और पूरी चीज़ गड़बड़ हो जाती है। मैं इसे एक झपट्टा में ठीक करना चाहता हूं।
जवाबों:
=
इंडेंट कमांड मोशन ले सकती है। तो, gg
फ़ाइल की शुरुआत, प्राप्त करने के लिए =
मांगपत्र के लिए, G
फ़ाइल के अंत में, gg=G
।
''
(दो एकल उद्धरण) आपको वापस उस स्थान पर ले जाते हैं जहां आप इतने gg=G''
इंडेंट थे कि फिर वापस आ जाएं।
टर्मिनल में चिपकाने से पहले, कोशिश करें :set paste
और उसके :set nopaste
बाद आप कर रहे हैं। यह ऑटो-इंडेंट, लाइन-रैप और अन्य सुविधाओं को बंद कर देगा जो आपके पेस्ट को गड़बड़ कर रहे हैं।
संपादित करें: इसके अलावा, मुझे यह इंगित करना चाहिए कि =
इंडेंटिंग की तुलना में बेहतर परिणाम आमतौर पर किसी बाहरी कार्यक्रम का उपयोग करके प्राप्त किया जा सकता है। उदाहरण के लिए, मैं :%!perltidy
हर समय दौड़ता हूं । astyle
, cindent
आदि का भी उपयोग किया जा सकता है। और, ज़ाहिर है, आप उन लोगों को एक कुंजी स्ट्रोक पर मैप कर सकते हैं, और फ़ाइल प्रकार के आधार पर अलग-अलग लोगों को एक ही कीस्ट्रोक पर मैप कर सकते हैं।
equalprg
इंडेंटिंग के लिए एक बाहरी फ़िल्टर का उपयोग करने के लिए एक ftplugin में विकल्प सेट कर सकते हैं =
।
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
यदि आप बिना किसी राग को टाइप किए हुए ब्लॉक को फिर से लिखना चाहते हैं, तो आप ऐसा कर सकते हैं:
[[=]]
=aB
जो कर्सर को बिल्कुल भी स्थानांतरित नहीं करेगा।
[[=]]
सभी आज्ञाओं का स्वामी है
gg=G
यह पूरी फाइल को इंडेंट करता है!
और नीचे दिए गए कुछ सरल और सुरुचिपूर्ण आदेशों का उपयोग जल्दी से विम या जीवीएम में लाइनों को इंडेंट करने के लिए किया जाता है।
वर्तमान लाइन के नीचे की सभी लाइनों को इंडेंट करने के लिए
=G
वर्तमान लाइन को इंडेंट करने के लिए
==
n
वर्तमान लाइन के नीचे की रेखाओं को इंडेंट करने के लिए
n==
उदाहरण के लिए, वर्तमान लाइन के नीचे 4 लाइनों को इंडेंट करने के लिए
4==
कोड के एक ब्लॉक को इंडेंट करने के लिए, ब्रेसिज़ में से एक पर जाएं और कमांड का उपयोग करें
=%
प्रेस से बच और फिर नीचे दिए गए संयोजन तेजी से टाइप करें:
gg=G
विम में, उपयोग करें :insert
। यह आपके सभी फॉर्मेटिंग को बनाए रखेगा और ऑटोइंडेंटिंग नहीं करेगा। अधिक जानकारी के लिए help :insert
।
vim-autoformat आपकी भाषा के लिए विशिष्ट बाहरी कार्यक्रमों का उपयोग करके आपके स्रोत फ़ाइलों को प्रारूपित करता है, जैसे कि Ruby फ़ाइलों के लिए "rbeautify" मणि, जावास्क्रिप्ट के लिए "js-beautify" npm पैकेज।
जटिल C ++ फ़ाइलों के लिए vim को =
फ़िल्टर कमांड का उपयोग करते समय हमेशा फॉर्मेटिंग सही नहीं मिलती है । तो ऐसी स्थितियों के लिए एस्ट्रल जैसे बाहरी सी ++ फॉर्मैटर का उपयोग करना बेहतर होता है (या अविश्वास ) जैसे:
:%!astyle
विम का '=' फ़ंक्शन डिफ़ॉल्ट रूप से अपने आंतरिक फ़ॉर्मेटर का उपयोग करता है (जो हमेशा चीजों को सही नहीं करता है) लेकिन कोई इसे सेट भी कर सकता है, जैसे कि यह इस सवाल पर चर्चा के रूप में इसे स्थापित करके, एस्ट्रल जैसे बाहरी फ़ॉर्मेटर का उपयोग कर सकता है ।
XML फ़ाइलों के लिए, मैं इस कमांड का उपयोग करता हूं
:1,$!xmllint --format --recover - 2>/dev/null
आपको xmllint स्थापित करने की आवश्यकता है (पैकेज libxml2-utils)
(स्रोत: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-commun.html )
आपके लिए ऐसा करने के लिए आप मैपिंग बना सकते हैं।
यह पूरी फ़ाइल को ऑटो इंडेंट करेगा और फिर भी आपके कर्सर को उस स्थिति में रखेगा जो आप हैं:
nmap <leader>ai mzgg=G`z
Vi संपादक के लिए, का उपयोग करें: सम्मिलित करें। यह आपके सभी स्वरूपण को बनाए रखेगा और ऑटो-इंडेंटिंग नहीं डालेगा। वास्तविक स्वरूपित फ़ाइल को देखने के लिए प्रेस से बच निकले अन्यथा आपको कुछ कचरा पात्र दिखाई देंगे। जैसे ^ I उदाहरण:
public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
}
बस दृश्य मोड में जाएं, और सिर्फ प्रेस = का चयन करने के बाद ऊपर से नीचे की पंक्तियों तक का चयन करें, सभी चयनित लाइन इंडेंट हो जाएंगी।
ggvG=
जब आप कर सकते हैं gg=G
। गति को दृश्य बनाने में क्या बिंदु था? यह उन सभी कार्यों के लिए जाता है जो गति लेते हैं।